2011-11-18 159 views
-3

可能重複:
In C arrays why is this true? a[5] == 5[a]爲什麼在C++中x [y] == y [x]?

有人告訴我這個...我不相信他們在第一,但它確實工作。如果X和Y不整個代碼改變,爲什麼這項工作:

int x [5] = { 0,1,2,3,4}; 
int y = 3; 

if(x[y] == y[x]){ 
    cout << "Why..." << endl; 
} 

如何X數組的索引Y值是= x索引的價值在排列Y?但是沒有y陣列。

+4

這已經在各種常見問題以及在這裏,在SO上被問及並回答gazillion次。 C FAQ鏈接:http://c-faq.com/aryptr/joke.html – AnT

+0

agh這是一個重複的 – Gabe

回答

6

它始終是真實的(正常的==操作符)

a[i] --> *(a+i) --> *(i+a) --> i[a] 

因爲int是內在的,有可交換的==操作符,這將永遠是真正的

+0

@delnan:那不是問題?這兩個表達式都是相同指針添加的指針取消引用。 –

+2

更重要的是,因爲'int *'沒有重載的'operator []'! –

+0

@KerrekSB:好點。 – sehe

3

由於以下所有條件相同:

x[y] == y[x] == *(x+y) == *(y+x) 
2

因爲x[y]只是另一種說法*(x + y),這是一樣的*(y + x)

+0

你的意思是「......另一種說法是*(x + y)',這與'*(y + x)'相同 –

+0

不,它是說'*(x + y)'。 &x [y]'會說'x + y'。 –

+0

@Martin對。:) –

相關問題