奇怪的 operator[] 行为

Strange operator[] behavior

我在写程序的时候,写错了。我写了 i[data] 而不是 data[i]。然而,该程序已成功编译并正常运行。

Operator[] 对数组的行为:

#include <iostream>

using namespace std;

int main()
{
  int data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  
  cout << data[6] << endl; // prints 6
  cout << 6[data]; // prints 6
  return 0;
}

与指针类似的运算符[]行为:

#include <iostream>

using namespace std;

int main()
{
  char* str = "Hello, world!";
  
  cout << str[9] << endl; //prints 'r'
  cout << 9[str]; //prints 'r'
  return 0;
}

为什么 data[i] 等于 i[data]

i[data] 等同于 *(i + data)

data[i] 等同于 *(data + i)

data + i等于i + data