我正在复习 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] 会对地址做什么
数组索引运算符
[]
实际上是指针算术和取消引用的简写。 E1[E2]
形式的表达式与 *((E1) + (E2))
完全相同。所以这个:
(&A)[0]
与:
完全相同*(&A + 0)
可以简化为:
*&A
由于寻址和取消引用相互抵消,这与以下内容相同:
A