| 关键词: nbsp sizeof 数组 double 一个 cout endl 大小 乘积 指针 |
考虑下面问题: char a[] = "abcdef"; int b[20] = {3, 4}; char c[2][3] = {"aa", "bb"}; cout<<sizeof(a)<<endl; // 7 cout<<sizeof(b)<<endl; // 20 cout<<sizeof(c)<<endl; // 6 数组a的大小在定义时未指定,编译时给它分配的空间是按照初始化的值确定的,也就是7。c是多维数组,占用的空间大小是各维数的乘积,也就是6。可以看出,数组的大小就是他在编译时被分配的空间,也就是各维数的乘积*数组元素的大小。 结论:数组的大小是各维数的乘积*数组元素的大小。 这里有一个陷阱: int *d = new int[10]; cout<<sizeof(d)<<endl; // 4 d是我们常说的动态数组,但是他实质上还是一个指针,所以sizeof(d)的值是4。 再考虑下面的问题: double* (*a)[3][6]; cout<<sizeof(a)<<endl; // 4 cout<<sizeof(*a)<<endl; // 72 cout<<sizeof(**a)<<endl; // 24 cout<<sizeof(***a)<<endl; // 4 cout<<sizeof(****a)<<endl; // 8 a是一个很奇怪的定义,他表示一个指向 double*[3][6]类型数组的指针。既然是指针,所以sizeof(a)就是4。 既然a是执行double*[3][6]类型的指针,*a就表示一个double*[3][6]的多维数组类型,因此sizeof(*a)=3*6*sizeof(double*)=72。同样的,**a表示一个double*[6]类型的数组,所以sizeof(**a)=6*sizeof(double*)=24。***a就表示其中的一个元素,也就是double*了,所以sizeof(***a)=4。至于****a,就是一个double了,所以sizeof(****a)=sizeof(double)=8。 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|