摘要:本人首先介绍了C++中sizeof操作符的用法和注意事项,其次对比了和strlen的区别和使用,方便大家在写代码的时候查阅,和面试、笔试的时候复习。
目录:
sizeof的用法:
sizeof 是一种单目操作符,而不是函数。sizeof以字节形式给出操作数的存储空间。
操作数可以是一个表达式或在括号内的类型名。操作数的存储空间由操作数的类型决定。
char str[]="hello";
char str1[100];
char *p;
int n=10;
sizeof(str1)=100;
sizeof(str)=5+1;
sizeof(p)=4;
sizeof(n)=4;
void Func(char str[100])
{
sizeof(str)=4;//str退化成指针了
}
void *p=malloc(100);
sizeof(p)=4;
当数组变量被传入函数中做sizeof 运算,则和指针的运算没有区别。
sizeof和strlen的区别:
-
sizeof是运算符;strlen 是函数;
-
sizeof操作符的结果类型是size_t,它在头文件typedef为unsigned int 类型,该类型保证能容纳实现所建立的最大对象的字节大小。
-
sizeof可以用类型做参数,strlen只能用char * 做参数,且必须是以‘\0‘结尾。
-
数组做sizeof的参数不退化,但作为strlen函数的参数,就会退化为指针了。
-
大部分编译器在编译程序的时候,就计算出来sizeof了,这也是sizeof()可以作为数组定义的维数的原因,strlen函数的结果要等运行的时候才能计算出来,它用来计算字符串的长度,不是类型占内存的大小。
-
sizeof后如果是类型必须加括号,如果是变量名可以不加括号。这是因为sizeof是操作符不是函数的原因。
-
在计算字符串数组的长度上有区别。 例如:
char str[10];
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