【发布时间】:2019-10-18 01:16:05
【问题描述】:
我正在阅读“C++ 编程语言”中关于指针和数组的部分,我遇到了一些让我难过的东西。
对于
a范围内的每个内置数组a和整数j,我们 有:
a[j] == *(&a[0]+j) == *(a+j) == *(j+a) == j[a]
我明白为什么*(&a[0]+j) 与a[j] 的含义相同,因为&a[0] 指向a 的第一个元素,然后它增加了j。
我还知道*(a+j) 和*(j+a) 等于a[j],a 从数组隐式转换为指向 a 的第一个元素的指针,然后递增 j 并取消引用。
但为什么是a[j] == j[a]?
我错过了什么?
【问题讨论】:
-
a[b]被定义为等同于*(a + b),和+commutes。 -
a[j]是*(a+j)的语法糖。j[a]是*(j+a)的语法糖。并且*(j+a)与*(a+j)相同。 -
有趣的问题。我认为这会让许多经验丰富的编码人员感到惊讶,尽管这很明显。