如果我有一个像这样声明的数组:
int a[3][2];
存储在地址A
。
然后a + 1等于A+2*4
,这对我来说很清楚,
但为什么&a+1
等于A+6*4
?
答案 0 :(得分:7)
a
是int[2]
的数组。其大小为2 * sizeof(int)
。这就是a + 1 = A + 2*4
的原因。 (因为你的sizeof(int) = 4
)
但是,&a
是指向int[3][2]
的指针。因此,sizeof(int[3][2]) = 6 * sizeof(int)
为&a + 1 = A + 6*4
答案 1 :(得分:2)
然后a + 1等于A + 2 * 4
这是因为a
衰减到int (*)[2]
,+1
导致2 * sizeof(int)
。
但为什么& a + 1等于A + 6 * 4?
在这种情况下,&a
会返回int (*)[3][2]
,+1
会返回2 * 3 * sizeof(int)
。
答案 2 :(得分:0)
因为运营商&优先于operator +。