[英]Why take the address of an array element like `&myArray[i]`? Bidimensional array
[英]Why doesn't (&array)[i] take the address of the ith element?
請考慮以下代碼
int tab2[2];
tab2[0]=5;
tab2[1]=3;
std::cout << tab2[1] << std::endl;
std::cout << (&tab2)[1] << std::endl;
正如我在其他主題中所讀到的,數組可以衰減到指針的第一個元素。 那么為什么[]對於上面代碼中的tab2和&tab2不起作用呢? 有什么不同嗎?
它已經被“轉換”為指針。 您可以對數組或指針使用[]
表示法...
(&tab2)
表示你得到數組的地址......在指針透視圖中,它是指向指針( **
)的指針。
所以你試圖將一個變量(它是一個數組)轉換為指針。 好的,但是你試着訪問[1]
元素,這當然不存在,因為你的指針指向你的數組的地址......這樣的表示法會期望第二個數組。
這個表達式:
(&tab2)[1]
獲取指向2個int的數組的指針。 然后在該指針到數組上使用數組語法,以獲得tab2之后的第2個2元素int數組。
所以你有記憶
tab2
0 1 // index into tab2
5 3 // values
你得到一個指向數組的指針
0 1
&tab2 -> 5 3
然后你走過tab2的2個整數數組
0 1 2 3
&tab2 -> 5 3 ? ?
/|\
(&tab2)[1]
使用(&tab2)
,您正在檢索陣列的地址。 你的陳述本身就是你的問題。 如果你使用過(*(&tab2))
,你會得到你期望的輸出 - 3
。
你通過向tab2添加地址(&)來完成你自己給出了tab2指針的內存地址,或指向指針的指針(int **)。 所以邏輯上,是的,索引它是有道理的。 但是,&tab2與tab2不同。 &tab2指向指針itsefl,而tab2指向數組。 通過索引&tab2為1,你已經告訴它查看序列中的下一個元素,它不存在(或者它確實存在,但屬於另一個變量)。 如果你用0索引它,這將是很好的,因為你會看到內存序列的“根”。
僅對tab2進行索引也很明顯,因為它指向一個數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.