什么是0 [p]在做什么?

时间:2013-12-27 13:03:42

标签: c

以下C代码在做什么?

int i;
int* p = &i;
0[p] = 42;

我希望这不会是事件编译。但它甚至在没有分段错误的情况下执行。所以我想知道我错过了[]运算符的奇怪用法。

3 个答案:

答案 0 :(得分:13)

C标准以这种方式定义了运算符[]

无论aba[b]被视为*((a)+(b))

这就是为什么0[p] == *(0 + p) == *(p + 0) == p[0]是数组的第一个元素。

答案 1 :(得分:9)

0[p]相当于p[0]。两者都转换为

0[p] = *(0+p) and p[0] = *(p+0)

从上述陈述两者都是平等的。

答案 2 :(得分:7)

0[p]
0[p] = 42;

中的

相当于p[0]

+操作是可交换的,我们有:

p[0] == *(p + 0) == *(0 + p) == 0[p]