C++菜鸟常见错误整理(第十四天)

 

关于sizeof

一、数组
1、char* a="0123456789";

sizeof(a)结果是4,a是指向字符串常量的字符指针,sizeof(*a)=1,*a是第一个字符

2、char a[]="0123456789";

sizeof(a)=11,a是数组,计算到\0,位置,因此是10+1

sizeof(*a)=1.*a是第一个字符

3、char a[100]="0123456789";

sizeof(a)=100 sizeof表示内存预分配的大小,100*1

strlen(a)结果为10,他的内部实现使用一个循环计算字符串长度,直到\0为止

4、int a[100]="0123456789";

sizeof(a)=100*4

strlen(a)错误

二、sizeof和strlen的区别

1、sizeof是运算符,strlen是函数

2、sizeof可以用类型做参数,strlen只能用char*做参数,而且必须以\0结尾。sizeof还可以用函数做参数,

例如 shor f();cout<<sizeof(f());结果就是2,sizeof(short)

3、数组做sizeof的参数不退化,传递给strlen就退化为指针了

4、大部分编译程序在编译的时候就把sizeof计算过了,是类型或者变量的长度,这就是sizeof(x)可以用来定义数组

维数的原因

char str[20] = "012345566";  int a = stlean(str);//a=10;int b = sizeof(str);//b=20

5、strlen的结果要在运行的时候才能计算出来,用来计算字符串的长度,而不是类型占内存的大小

6、数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址。如fun(char [9]) fun(char [])

都等价于fun(*char)。在C++中,传递的永远是数组的首元素的指针,编译器不知道数组的大小

7、sizeof的结果是类型就必须加括号,如果是变量名就可不加括号,因为sizeof是个操作符而不是函数

8、当使用了一个结构类型或变量的时候,sizeof返回实际大小,当使用一静态空间数组时,sizeof返回全部数组的

尺寸,sizeof不能返回被动态分配数组或者外部的数组尺寸

 

你可能感兴趣的:(sizeof,指针,strlen)