在C中,为什么这"倒退"索引工作?

时间:2014-12-13 13:42:02

标签: c indexing

请考虑以下事项:

int main() {
        int a[] = {42, 9001, -1337};
        printf("%d, %d\n", a[0], 0[a]);
        return 0;
}

之前我没有看到0[a],但它似乎与a[0]相同(对于其他数字也是如此,不仅仅是0

这是我编译器的错(GCC)吗?有关于此行为的任何文档吗?它有什么用途?

3 个答案:

答案 0 :(得分:2)

a[0]*(a + 0)的另一种形式,可以重写为*(0 + a),可以重写为0[a]

因此,基本上,a[0]0[a]代表相同。

编译器没有错误或错误。

答案 1 :(得分:0)

a[0]*(a+0)相同 0[a]*(0+a)相同
我们知道a+00+a相同。所以*(a+0)==*(0+a)表示a[0]==0[a]

答案 2 :(得分:0)

如果你给a[0]。编译器将使其成为*(a+0).

所以你给的是0[a]。它会将其作为*(0+a)。它正在发挥作用。