为什么2 [myArray]有效的C语法?

Mit*_*lax 5 c arrays syntax pointers

重复

在C数组中为什么这是真的?a [5] == 5 [a]


给定一个数组

 myArray[5] = { 0, 1, 2, 3, 4 };
Run Code Online (Sandbox Code Playgroud)

一个元素可以作为

 2[myArray]
Run Code Online (Sandbox Code Playgroud)

为什么?当我看到这个表达式时,我想象C试图访问指针"2"并且未能添加"myArray"指针增量来取消引用该地址.我错过了什么?

Chr*_*ung 17

在C中,a [b]相当于*(a + b).当然,+运算符是可交换的,因此a [b]与b [a]相同,*(b + a)与*(a + b)相同.

  • 历史记录:http://cm.bell-labs.com/cm/cs/who/dmr/chist.html.对于BCPL来说是V!i,它在索引i处索引了一个数组V. 对称性直接显示在那里. (3认同)
  • 值得指出的是,在C中,myArray本质上是一个包含指针地址的int变量,这就是这个属性有效的原因.括号告诉它评估指针在寻址的内存块中查找数据.它不会先尝试访问内存,然后添加索引; 它将指针和索引一起添加,然后访问内存.这种方法效率更高,因为您不能访问两个地址,只需一个. (2认同)
  • +1,并且绝对清楚:a [2] ==*(a + 2)== 2 [a] ==*(2 + a) (2认同)