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

时间:2014-07-02 11:45:28

标签: 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]);

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

1 个答案:

答案 0 :(得分:0)

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