为什么arr[-2]不等于-2[arr]?

#包括<iostream>
使用名称空间std;
int main()
{
int-arr[3]={10,20,30};
cout<<arr[-2]<<endl;
法院<<-2[arr]<<<endl;
返回0;
}

输出:

4196160
-30

此处arr[-2]超出范围且无效,导致未定义的行为。
但是-2[arr]的计算结果是-30。为什么?

arr[-2]是否等同于-2[arr]

-2[arr]被解析为-(2[arr])。在C(和C++中,忽略重载), x[y] 是 *(x+y)代码(参见本问题中的更多讨论),这意味着 2 [ARR] >等于 ARR [2 ] >

发表评论