**a[3][4],(**a)[3][4], *(*a)[3][4], *(*a[3])[4]等变量占用的内存

来源:互联网 发布:微信小程序服务器php 编辑:程序博客网 时间:2024/06/05 19:43

今天发现一个一个关于二级指针的内存占用问题:**a[3][4],(**a)[3][4], *(*a)[3][4], *(*a[3])[4]等变量占用的内存字节大小。自己在VS2010 win32平台上运行了一下,看到了有趣的答案,然后百度了一下,发现答案错的不少,也许是控制台不一样。下面是代码片段和运行结果:

#include <algorithm>#include <iostream>using namespace std;int main(){double **a1[3][4];double (**a2)[3][4];double *(*a3)[3][4];double *(*a4[3])[4];double *(**a5[2][3])[4];cout <<sizeof(a1) << endl<<sizeof(a2) << endl<<sizeof(a3) << endl<<sizeof(a4) << endl<<sizeof(a5)<< endl;return 0;}



解释原因如下:

在32位平台下,指针占用内存的大小为4个字节,然后查了一下,()和[]的优先级一样,结合性是从左到右,都比*优先级高。就例子中变量a1-a5中()在左,优先级先于[],所以,最终指针的个数为()中指针的个数。如,变量a1,[]优先级高于*,所以最后的指针个数为3*4=12,内存占用为:12*4=48;变量a2和a3中()中的指针个数为1,所以最后的内存占用为:1*4=4;变量a4中()中的指针个数为3个,所以最后的内存占用为:3*4=12;同理a5为:2*3*4 = 24。

原创粉丝点击