下面的代码索引一个int?这个怎么用?
#include<stdio.h>
int main()
{
int arr[] = {10,20,30};
cout << -2[arr];
return 0;
}
打印-30
。怎么样?为什么?
下面的代码索引一个int?这个怎么用?
#include<stdio.h>
int main()
{
int arr[] = {10,20,30};
cout << -2[arr];
return 0;
}
打印-30
。怎么样?为什么?
在你的情况,
cout<<-2[arr];
被译为
cout<<-(arr[2]);
因为,
array indexing boils down to pointer arithmatic,所以,数组名的位置,索引值可以互换在记号中。
链接的答案在C中,但也适用于C++。
关于显式()
s,您可以在这里查看有关operator precedence。
看这个说法
cout << -2[arr];
首先,知道怪the following is true
2[arr] == arr[2]
话虽这么说operator[]
有higher precedence比-
即使它看起来。所以,你实际上是试图调用
-(arr[2])
在C和C++,2[arr]
其实是一回事arr[2]
。
由于运营商的优先级,-2[arr]
被解析为-(2[arr])
。这意味着整个表达式评估为否定arr
的第三个元素,即-30
。
'cout << - 2 [arr];'我永远不会让代码审查过程中发生混乱......无理由。 – Borgleader
我谦虚地不同意这个骗局。这个问题涉及到显着差异,涉及到它的运营商优先级和对UB的误解,如(现在删除的)注释中所示。我要求重新考虑这个案子。 –