请考虑以下事项:
int main() {
int a[] = {42, 9001, -1337};
printf("%d, %d\n", a[0], 0[a]);
return 0;
}
之前我没有看到0[a]
,但它似乎与a[0]
相同(对于其他数字也是如此,不仅仅是0
)
这是我编译器的错(GCC)吗?有关于此行为的任何文档吗?它有什么用途?
答案 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+0
与0+a
相同。所以*(a+0)==*(0+a)
表示a[0]==0[a]
。
答案 2 :(得分:0)
如果你给a[0]
。编译器将使其成为*(a+0).
所以你给的是0[a]
。它会将其作为*(0+a)
。它正在发挥作用。