C 切换参考和偏移时的奇怪阵列逻辑

C 切换参考和偏移时的奇怪阵列逻辑,c,pointers,C,Pointers,今天我在学校用指针做实验,发现下面的代码可以输出 1 2 3 4 5 6 7 8 9 代码如下: int foo[10]; int i; for (i = 0; i < 10; i++) foo[i] = i; for (i= 0; i < 10; i++) printf("%d\n", i[foo]); intfoo[10]; int i; 对于(i=0;i

今天我在学校用指针做实验,发现下面的代码可以输出

1
2
3
4
5
6
7
8
9
代码如下:

int foo[10];
int i;
for (i = 0; i < 10; i++)
foo[i] = i;

for (i= 0; i < 10; i++)
printf("%d\n", i[foo]);
intfoo[10];
int i;
对于(i=0;i<10;i++)
foo[i]=i;
对于(i=0;i<10;i++)
printf(“%d\n”,i[foo]);

我一直在互联网上寻找解释,但似乎找不到。

这是因为
I[foo]
被您的编译器解释为
*(I+foo)
,这与
foo[I](*(foo+I))
相同。 所以您正在打印
foo[i]
请注意,
*(foo+i)
由于指针算术系统,确实指向了正确的地址。将数字a添加到指针时,实际上是在添加
a*sizeof(*指针)