可能重复:
In C arrays why is this true? a[5] == 5[a]在C编程语言中:A [i]和i [A]都指向数组A的第i个元素。为什么?
虽然用C编码,我意外发现,下面的代码正确打印阵列A的元素:
int A[] = {10, 20, 5, 32, 40};
for(int i=0; i<5; i++)
printf("%d \n", i[A]);
所以i[A]
行为像A[i]
。
为什么?这种行为背后的逻辑是什么?
可能重复:
In C arrays why is this true? a[5] == 5[a]在C编程语言中:A [i]和i [A]都指向数组A的第i个元素。为什么?
虽然用C编码,我意外发现,下面的代码正确打印阵列A的元素:
int A[] = {10, 20, 5, 32, 40};
for(int i=0; i<5; i++)
printf("%d \n", i[A]);
所以i[A]
行为像A[i]
。
为什么?这种行为背后的逻辑是什么?
因为在C下标操作中指针运算来定义的,见
(C99,6.5.2.1p2)“下标操作符[]的定义是,E1 [E2]是相同到(*((E1)+(E2)))“。
这是另外的可交换性:
*(A+i) same as *(i+A)