C / C ++多維數組內部我有一個關于C / C ++如何在內部存儲使用符號聲明的多維數組的問題foo[m][n]。我不是在質疑指針的純指針等等......因為速度原因,我在問...如果我錯了,請糾正我,但語法上foo是一個指針數組,它們本身指向一個數組int foo[5][4]*(foo + i) // returns a memory address*( *(foo + i) + j) // returns an int我從很多地方聽說過C / C ++編譯器foo[m][n]在幕后轉換為一維數組(計算所需的一維索引i * width + j)。但是如果這是真的那么以下就可以了*(foo + 1) // should return element foo[0][1]因此,我的問題foo[m][n]是:(總是嗎?)存儲在內存中作為平面一維數組是真的嗎?如果是這樣,為什么上面的代碼如圖所示。
2 回答

一只名叫tom的貓
TA貢獻1906條經驗 獲得超3個贊
是的,C / C ++將多維(矩形)數組存儲為連續的內存區域。但是,您的語法不正確。要修改元素foo[0][1]
,以下代碼將起作用:
*((int *)foo+1)=5;
顯式類型轉換是必要的,因為foo+1
,是一樣的&foo[1]
它是不是在所有的同樣的事情foo[0][1]
。*(foo+1)
是指向平坦存儲區中第五個元素的指針。換句話說,*(foo+1)
基本上是foo[1]
和**(foo+1)
是foo[1][0]
。以下是一些二維數組的內存布局:
- 2 回答
- 0 關注
- 531 瀏覽
添加回答
舉報
0/150
提交
取消