下面的代碼索引一個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的誤解,如(現在刪除的)註釋中所示。我要求重新考慮這個案子。 –