C++ operator []魔术

EzR*_*d3r 5 c++

我遇到了一种奇怪的方式,对阵列元素的吸引力,并认为它是一个错误,但它的工作原理.你能解释它是如何工作的吗?

#include <iostream>
int main()
{
  int a[] = {1,2,3,4};
  std::cout << 1[a];
}
Run Code Online (Sandbox Code Playgroud)

Kar*_*ski 10

表达a[b]相当于*(a + b)所以在您的例子中,我们有:

1[a]这可以写成*(1 + a)这是相同的*(a + 1),其是最终相同a[1]

  • 根据我大脑最烦人的解析,第一句话是"表达式`a [b]`相当于`*(a + b)`"而没有"在你的例子中"的限制,这不一定是真的.例如,如果`a`是`std :: vector`,`a [b]`(通常)等价于`a.operator [](b)`,而`*(a + b)`不编译.但仍然是+1.:) (2认同)

bre*_*ak1 2

BaseAddr[ Offset ] = *( BaseAddr + Offset )
Offset[ BaseAddr ] = *( Offset + BaseAddr ) = *( BaseAddr + Offset )
Run Code Online (Sandbox Code Playgroud)