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(*指针)