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

今天发现一个关于二级指针的内存占用问题:**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。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bixiwen_liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值