2013-04-25 217 views
0

給予代碼:C++指針算術

int arr[] = {11,22,33,44,55} 
for(int i = 0; i <5 ; i++) 
    cout << *(arr+i) << " "; 

是否*(arr+i)有作爲arr[i]同樣的效果?

+1

是的,它確實如此。 – piokuc 2013-04-25 19:43:04

+0

易於測試,當你用'arr [i]替換它會發生什麼' – 2013-04-25 19:43:06

+0

它甚至與'我[arr]'相同。 – 2013-04-25 20:00:51

回答

11

是。實際上,下標操作E1[E2]被定義爲等同於*((E1)+(E2))

後綴表達式,隨後在方括號中的表達式是一個後綴表達式。其中一個表達式的類型應該是「指向T的指針」,另一個表達式應該是非範型的枚舉或整型。結果是類型爲「T」的左值。「T」類型應爲完全定義的對象類型。 表達式E1[E2]*((E1)+(E2))相同(根據定義)。

+1

這導致了一些奇怪的事情,比如:'我[arr]'。 – m0nhawk 2013-04-25 19:59:03

1

是的。陣列衰減到pointers。數組名稱指向數組的第一個元素。所以

*(arr +i) 

等同於:

arr[i]