以下代码
#include<stdio.h>
int main()
{
int arr[] = {10,20,30};
cout << -2[arr];
return 0;
}
打印-30
。怎么样?为什么呢?
答案 0 :(得分:12)
在你的情况下,
cout<<-2[arr];
被翻译为
cout<<-(arr[2]);
因为,
array indexing boils down to pointer arithmatic,因此,数组名称和索引值的位置可以用符号互换。
链接的答案在C中,但对C ++也有效。
关于明确的()
,您可以在此处查看operator precedence。
答案 1 :(得分:4)
看一下这句话
cout << -2[arr];
首先,要知道它看起来很奇怪the following is true
2[arr] == arr[2]
据说operator[]
有higher precedence而不是-
。所以你实际上是在尝试调用
-(arr[2])
答案 2 :(得分:3)
在C和C ++中,2[arr]
实际上与arr[2]
相同。
由于运算符优先级,-2[arr]
被解析为-(2[arr])
。这意味着整个表达式的计算结果是否定arr
的第3个元素,即-30
。