数组地址
如果我有一个这样声明的数组:
int a[3][2];
存储在地址 A
处。
那么a+1等于A+2*4
,这对我来说很清楚, 但为什么&a+1
等于A+6*4
呢?
If I have an array declared like this:
int a[3][2];
stored at address A
.
Then a+1 is equal to A+2*4
, this is clear to me,
but why is &a+1
equal to A+6*4
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
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
a
is an array ofint[2]
. Which has size2 * sizeof(int)
. That's whya + 1 = A + 2*4
. (sincesizeof(int) = 4
in your case)However,
&a
is a pointer toint[3][2]
. Sincesizeof(int[3][2]) = 6 * sizeof(int)
, therefore:&a + 1 = A + 6*4
这是因为
a
衰减为int (*)[2]
,并且+1
结果为2 * sizeof(int)
。在本例中,
&a
返回int (*)[3][2]
,+1
结果为2 * 3 * sizeof(int)
。This is because
a
decays toint (*)[2]
, and+1
results in2 * sizeof(int)
.In this case,
&a
returnsint (*)[3][2]
, and+1
results in2 * 3 * sizeof(int)
.因为运算符 &优先于运算符+。
Because operator & take precedence over operator +.