数组地址

发布于 2024-12-14 23:51:36 字数 185 浏览 0 评论 0原文

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

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

挥剑断情 2024-12-21 23:51:37

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 of int[2]. Which has size 2 * sizeof(int). That's why a + 1 = A + 2*4. (since sizeof(int) = 4 in your case)

However, &a is a pointer to int[3][2]. Since sizeof(int[3][2]) = 6 * sizeof(int), therefore: &a + 1 = A + 6*4

同尘 2024-12-21 23:51:37

那么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)

Then a+1 is equal to A+2*4

This is because a decays to int (*)[2], and +1 results in 2 * sizeof(int).

but why is &a+1 equal to A+6*4?

In this case, &a returns int (*)[3][2], and +1 results in 2 * 3 * sizeof(int).

淡紫姑娘! 2024-12-21 23:51:37

因为运算符 &优先于运算符+。

Because operator & take precedence over operator +.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文