C++中1[指针]的含义?

Meaning of 1[pointer] in C++?

正在阅读 cppreference 我找到了这个例子:

int a[4] = {1, 2, 3, 4};
int* p = &a[2];
std::cout << p[1] << p[-1] << 1[p] << (-1)[p] << '\n'; // 4242

我对1[p](-1)[p]的含义感到困惑。在别处寻求帮助时,我被告知:“1[ptr] 等同于 *(1 * sizeof(T) + ptr)”。所以我机械地理解为什么它输出 4242,但我发现很难推理。因为通常将指针放在方括号中是无意义的,而且本身就是一个错误:

[cling]$ 1[p]
(int) 4
[cling]$ [p]
input_line_15:2:3: error: 'p' cannot be captured because it does not have
      automatic storage duration
 [p]
  ^

这只是我应该记住的语法的特例,还是我误解了语句背后的某些逻辑?

假设p是一个指针或数组,n是一个整数。当编译器看到这个:

p[n]

它在逻辑上将该表达式解释为:

*(p+n)

所以当它看到这个时:

n[p]

编译器将其视为:

*(n+p)

这在代数上与 *(p+n)

相同

因此:p[n] == n[p]