这几行简单的代码中为什么a是8个字节

img


如图,创建了一个二维数组,a打印出来是占用8个字节。说明占用了2个int对象的地址,但我打印出来的地址和a[0]和a[0][0]一样,是不是因为它是多维数组,占用了两个地址,而这个两个地址刚好相等,请求说明一下,

*a在这里已经不是求a占用的字节数了。
看这段代码:

int a[3][2];
printf("%s\n", typeid(*a).name());

需要头文件typeinfo才能运行。由于MinGW输出的是mangle后的名字,我选用MSVC执行编译。
输出结果是int[2]。换言之,*a的真实类型是具有两个元素的int数组,到这里,答案已经非常明显了吧。int[2]的长度当然是8字节。
要a本身的长度,需要用sizeof(a)。

这里的a是 int(*)[2]类型,*a的类型就是int[2],2个int就是8字节了,当然int也不一定是4字节。64bit环境中一个int就是8字节。(觉得好的话,麻烦关注一下我的内容哦!)