指向数组的指针大小

时间:2011-10-13 19:03:56

标签: c++ pointers

如果我有一个像这样声明的数组:

int a[3][2];

那么为什么:

sizeof(a+0) == 8

,而:

sizeof(a)   == 24

我不明白如何向指针添加0会更改sizeof输出。是否有一些隐式类型转换?

2 个答案:

答案 0 :(得分:12)

如果将0添加到a,则a首先转换为类型int(*)[2]的指针值(指向类型{{1}的数组的第一个元素{1}})。然后将int[3][2]添加到其中,将0个字节添加到该指针值表示的地址。由于该乘法产生0,因此它将产生相同的指针值。由于它是一个指针,0 * sizeof(int[2])产生一个指针的大小,在你的盒子上是8个字节。

如果你做sizeof(a+0),编译器没有理由将sizeof(a)转换为指针值(只有当你想索引元素或做涉及地址的指针算法时才有意义)要素)。因此,表达式a保持为数组类型,并且您将获得a的大小,而不是int[3][2]的大小。所以,int(*)[2]在你的盒子上是24字节。

希望这能澄清事情。

答案 1 :(得分:0)

sizeof告诉您表达式类型的大小。将0添加到a时,类型将成为指针(64位系统上为8个字节)。