首页 电脑 电脑学堂 查看内容

编程语言设计的五大陷阱

2010-9-25 16:37 833 0

摘要:     在近几年来,编程语言的设计正在经历着类似于“文艺复兴”的过程,这么说主要是基于下面两个事实:     1)多核技术推动着PC消费者...
关键词: 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。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部