亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C / C ++多維數組內部

C / C ++多維數組內部

C++ C
慕容3067478 2019-08-19 14:54:51
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]。以下是一些二維數組的內存布局:


查看完整回答
反對 回復 2019-08-19
  • 2 回答
  • 0 關注
  • 531 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號