在 C 语言中,为什么这种“向后”索引有效?

Chi*_*iru 5 c indexing

考虑以下:

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

我以前没有看到0[a],但它的作用似乎与a[0](对于其他数字也同样如此,而不仅仅是对于0)。

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

Spi*_*rix 16

a[0]与 相同 与*(a+0)
0[a]相同*(0+a)

我们知道与a+0相同0+a。所以*(a+0)==*(0+a)这意味着a[0]==0[a]

  • 它在 [r/programminghorror](https://www.reddit.com/r/programminghorror/comments/v7pyc8/comment/ibm1i77/?utm_source=bob&utm_medium=nokia5110) 中被引用,但以积极的方式。 (2认同)

Sou*_*osh 5

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

所以,本质上,a[0]0[a]代表的是一样的。

您的编译器没有错误或错误。