当我发现以下代码输出
时,我正在学校里用指针试验一些东西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]);
我一直在寻找互联网上的解释,但我似乎找不到一个。
答案 0 :(得分:0)
这是因为i[foo]
被编译器解释为*(i + foo)
,它与foo[i] ( *(foo +i) )
相同。
所以你正在打印foo[i]
请注意,由于指针算术系统,*(foo + i)
确实指向正确的地址。向指针添加数字A时,实际上是在添加A*sizeof(*your_pointer)