关于C#:0 [p]在做什么?


What is 0
doing?

本问题已经有最佳答案,请猛点这里访问。

下面的C代码在做什么?

1
2
3
int i;
int* p = &i;
0[p] = 42;

但我认为这不会编译事件。但它甚至执行时没有分段错误。所以我想知道我错过了[]操作符的奇怪用法。


C标准规定了操作员[],如下所示:

无论ab是什么,a[b]被认为是*((a)+(b))

这就是为什么0

== *(0 + p) == *(p + 0) == p[0]是数组的第一个元素。


0

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

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

从上面的陈述来看,两者都是相等的。


1
0[p]

0

= 42;中

相当于p[0]

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

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