給予代碼:C++指針算術
int arr[] = {11,22,33,44,55}
for(int i = 0; i <5 ; i++)
cout << *(arr+i) << " ";
是否*(arr+i)
有作爲arr[i]
同樣的效果?
給予代碼:C++指針算術
int arr[] = {11,22,33,44,55}
for(int i = 0; i <5 ; i++)
cout << *(arr+i) << " ";
是否*(arr+i)
有作爲arr[i]
同樣的效果?
是。實際上,下標操作E1[E2]
被定義爲等同於*((E1)+(E2))
:
後綴表達式,隨後在方括號中的表達式是一個後綴表達式。其中一個表達式的類型應該是「指向
T
的指針」,另一個表達式應該是非範型的枚舉或整型。結果是類型爲「T
」的左值。「T
」類型應爲完全定義的對象類型。 表達式E1[E2]
與*((E1)+(E2))
相同(根據定義)。
這導致了一些奇怪的事情,比如:'我[arr]'。 – m0nhawk 2013-04-25 19:59:03
是的。陣列衰減到pointers
。數組名稱指向數組的第一個元素。所以
*(arr +i)
等同於:
arr[i]
是的,它確實如此。 – piokuc 2013-04-25 19:43:04
易於測試,當你用'arr [i]替換它會發生什麼' – 2013-04-25 19:43:06
它甚至與'我[arr]'相同。 – 2013-04-25 20:00:51