我正在研究 C 语言中的一些指针语句,了解如何迭代从A[]
开始的数组 () i = 1
。我能够理解为什么以下内容有效:
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 语言中的一些指针语句,了解如何迭代从A[]
开始的数组 () i = 1
。我能够理解为什么以下内容有效:
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))
. 所以这:与以下完全相同:
可以简化为:
由于寻址和取消引用有效地相互抵消,因此这与以下内容相同: