关于C中指针和数组的问题

问题描述 投票:0回答:1

我正在复习 c 中指针的一些语句,了解如何从 i = 1 开始迭代数组 (A)。我能够理解为什么以下内容有效:

int* B = A; printf("%d\n", B[i - 1]);

但是当我看到这个也有效时,我很困惑。

int* B = (&A)[0]; printf("%d\n", B[i - 1]);

有人可以解释一下背后的逻辑吗

(&A)[0]

我在想 (&A) 获取 A 的地址,比如说 0x8000,但我不确定 [0] 会对地址做什么

c++ arrays c pointers
1个回答
0
投票

数组索引运算符

[]
实际上是指针算术和取消引用的简写。
E1[E2]
形式的表达式与
*((E1) + (E2))
完全相同。所以这个:

(&A)[0]

与:

完全相同
*(&A + 0)

可以简化为:

*&A

由于寻址和取消引用相互抵消,这与以下内容相同:

A
© www.soinside.com 2019 - 2024. All rights reserved.