在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)
。因此,它正在发挥作用