在C中,这是为什么;“向后”;索引工作?

在C中,这是为什么;“向后”;索引工作?,c,indexing,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)?有关于这种行为的文件吗?它的作用是什么?a[0]是*(a+0)的另一种形式,可以重写为*(0+a),也可以重写为0[a] 因此,本质上,a[0]和0

考虑以下几点:

int main() {
        int a[] = {42, 9001, -1337};
        printf("%d, %d\n", a[0], 0[a]);
        return 0;
}
我以前没有看到
0[a]
,但它似乎与
a[0]
一样(其他数字似乎也是如此,不仅仅是
0


这是我的编译器的错(GCC)?有关于这种行为的文件吗?它的作用是什么?

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

因此,本质上,
a[0]
0[a]
表示相同的情况


编译器没有错误。

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

因此,本质上,
a[0]
0[a]
表示相同的情况


编译器没有错误。

a[0]
*(a+0)

0[a]
*(0+a)



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

a[0]
*(a+0)

0[a]
*(0+a)



我们知道
a+0
0+a
是一样的。所以
*(a+0)==*(0+a)
这意味着如果你给出
a[0]==0[a]
。编译器将使其达到
*(a+0)。


所以你给了
0[a]
。它将使其成为
*(0+a)
。所以它起作用了。

如果你给
一个[0]
。编译器将使其达到
*(a+0)。

所以你给了
0[a]
。它将使其成为
*(0+a)
。因此,它正在发挥作用