C++ sizeof操作符的用法和strlen函数的区别
摘要:本人首先介绍了C++中sizeof操作符的用法和注意事项,其次对比了和strlen的区别和使用,方便大家在写代码的时候查阅,和面试、笔试的时候复习。
目录:
sizeof的用法:
sizeof 是一种单目操作符,而不是函数。sizeof以字节形式给出操作数的存储空间。
操作数可以是一个表达式或在括号内的类型名。操作数的存储空间由操作数的类型决定。
char str[]="hello";
char str1[];
char *p;
int n=;
sizeof(str1)=;
sizeof(str)=+;
sizeof(p)=;
sizeof(n)=;
void Func(char str[]) {
sizeof(str)=;//str退化成指针了
}
void *p=malloc();
sizeof(p)=;
当数组变量被传入函数中做sizeof 运算,则和指针的运算没有区别。
sizeof和strlen的区别:
sizeof是运算符;strlen 是函数;
sizeof操作符的结果类型是size_t,它在头文件typedef为unsigned int 类型,该类型保证能容纳实现所建立的最大对象的字节大小。
sizeof可以用类型做参数,strlen只能用char * 做参数,且必须是以'\0'结尾。
数组做sizeof的参数不退化,但作为strlen函数的参数,就会退化为指针了。
大部分编译器在编译程序的时候,就计算出来sizeof了,这也是sizeof()可以作为数组定义的维数的原因,strlen函数的结果要等运行的时候才能计算出来,它用来计算字符串的长度,不是类型占内存的大小。
sizeof后如果是类型必须加括号,如果是变量名可以不加括号。这是因为sizeof是操作符不是函数的原因。
在计算字符串数组的长度上有区别。 例如:
char str[];
int a=strlen(str);
int b=sizeof(str);
//a 为0 b为10;
如果要计算指针指向的字符串的长度,则一定要使用strlen例如:
char *str="hello";
int a=sizeof(str);
int b=strlen(str);
//a=4 b= 5
C++ sizeof操作符的用法和strlen函数的区别的更多相关文章
- sizeof运算符和strlen函数的区别
1.sizeof是运算符,而strlen是函数. 2.sizeof操作符的运算结果为size_t,他在头文件中的typedef为unsigned int.该类型保证能容纳所操作对象的最大字节大小. 3 ...
- sort方法和sorted()函数
sort方法和sorted()函数的区别: 相同点:都能完成排序操作. 不同点: (1)使用sort()方法对list排序会修改list本身,不会返回新list,sort()不能对dict字典进行排序 ...
- C语言strlen函数和sizeof操作符
字符'x'于字符串"x"的区别 'x' 属于基本类型(char)字符类型-----------------由1个字符组成('x') "x"属于派生类型(char ...
- C++中sizeof操作符与strlen函数
sizeof操作符: sizeof是一个操作符,返回一条表达式或一个类型名字所占的字节数.返回值一个常量表达式,类型为size_t. size_t sizeof(type) size_t sizeof ...
- 字符串 前篇 ---- sizeof()操作符和strlen()库函数
本文不是研究sizeof(), strlen() 的深奥定义和原理,我们不会在理论上太过钻牛角尖.希望读这篇文章的你,也不要太过抠概念(不要拘泥于语法).我们只做 实用意义 的介绍和讨论. 在介绍字符 ...
- strcpy,strlen, strcat, strcmp函数,strlen函数和sizeof的区别
//计算字符串实际长度 //strlen()函数:当遇到'\0'时,计算结束,'\0'不计入长度之内,如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到'\0 ...
- sizeof和strlen函数区别
一.sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等. 它的功能是:获得保 ...
- c语言之sizeof总结+strlen函数
一.sizeof的概念 Sizeof是C语言的一种单目操作符,如C语言的其他操作符++.–等.它并不是函数.Sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是一个表达式或括在括号内的类 ...
- C语言中sizeof、strlen函数的部分理解
一.测试环境 Win10 + Visual Studio 2017 二.测试代码 #include "pch.h" #include <iostream> #inclu ...
随机推荐
- TV
https://github.com/Xs4allWebTV/androidhttps://github.com/mode89/video-feedhttp://www.javaapk.com/sou ...
- [安卓学习]AndroidManifest.xml文件内容详解
一,重要性 AndroidManifest.xml是Android应用程序中最重要的文件之一.它是Android程序的全局配置文件,是每个 android程序中必须的文件.它位于我们开发的应用程序的根 ...
- iOS6 / iOS7 状态栏高度适配
问题原因:iOS7的状态栏(status bar)不再占用单独的20px,所以假设你在iOS6上的界面布局是正常的,那么到了iOS7上就会变成以下这个样子: 左边是iOS6界面 ...
- mybatis0212 mybatis逆向工程 (MyBatis Generator)
1mybatis逆向工程 (MyBatis Generator) .1什么是mybatis的逆向工程 mybatis官方为了提高开发效率,提高自动对单表生成sql,包括生成 :mapper.xml.m ...
- Android(java)学习笔记94:关于广播接收者的注册和使用心得
下面我们先看一部分代码,由代码进行进一步的深入: registerReceiver( new BroadcastReceiver() {//onReceive中代码的执行时间不要超过5s,androi ...
- IIS错误500.21
操作系统:win7,有.net2.0,.net4.0 网站4.5, 错误原因:IIS未注册4.0框架. 解决办法: %windir%\Microsoft.NET\Framework\v4.0.3031 ...
- ResponseBody的使用
使用Spring的@ResponseBody有时还是挺方便的,在ajax调用返回纯字符串时有中文编码问题. @ResponseBody @RequestMapping(value="/dec ...
- Call to undefined function imagettftext()解决方法
由 老高 发表于 2014-10-03 在 代码人生 分类 老高在一个新环境中装DEDECMS的时候发现后台验证码无法显示.直接搜索一下这个错误,有人说session错误,有的说权限错误等等,这不胡 ...
- select选项框特效
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 如何更好的理解(pageX,pageY,clientX,clientY,eventX,eventY,scrollX,scrollY,screenX,screenY,event.offsetX,event.offsetY,offsetLeft,style.left)
1 pageX,pageY:鼠标指针相对于当前窗口的X,Y坐标,计算区域包括窗口自身的控件和滚动条.(火狐特有) 2 event.clientX,event.clientY:鼠标指针相对于当前窗口的X ...