C_and_CPP 板


LINE

已經看過第十二誡,但是說實話看不太懂... 就我微薄的理解和書上所學的,陣列名稱也是陣列首元素的地址 又因為陣列在記憶體中是連續的, 所以當我想要print出陣列所有元素時 我可以使用指針偏移的方法去取: int c[3] = { 0,1,2}; for (int i = 0; i < 3; i++) { printf("%d=%d\n",i, *(c + i) ); } 這有很多範例,但我的問題出在二維、三維陣列上。 這是測試的code https://ideone.com/LYljdX 依照上面的邏輯,靜態的二三維陣列在記憶體中應該也是連續的 所以當我想要取出所有元素: int a[2][2][3] = { { { 7,8,9},{ 3,4,5} },{ { 6,7,8 },{ 9,10,11 } } }; int *a_ptr = a[0][0]; //int *a_ptr = a; 這樣也對 我從a的地址去取: for (int i = 0; i < 12; i++) { printf("%d=%d\n",i, *(a + i) ); } 這樣不行 但我改用: for (int i = 0; i < 12; i++) { printf("%d=%d\n",i, *(a_ptr + i) ); } 這樣的結果卻是可以的 這邊我就有點無法理解了, a_ptr不就是指向a,也就是陣列首元素地址嗎? 為何這邊這樣用就正確了... 另外在十二誡中有指出 "但是多維陣列中,無法如此使用,事實上這也很直觀,試圖拿一個 pointer to pointer to int 來操作一個 int 二維陣列,這是不合理的!" 所以我有點困惑@@ ---------------------- 第二個問題是 動態陣列在記憶體中也是連續的嗎? 網路上找到是malloc三次,這樣做的三維陣列是否可以像上面那樣 print出全部的元素? https://ideone.com/68yhYj 我自己嘗試做了,但不知道為什麼沒辦法。 會挑選一些解答贈送300p 微薄謝禮不成敬意。 -- 我的意中人是個蓋世英雄,有一天他會踩著七色的雲彩來娶我 我猜中了前頭,可是我猜不著這結局。 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.36.126.205 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1575412180.A.209.html ※ 編輯: silverair (114.36.126.205 臺灣), 12/04/2019 06:47:16
1F:推 LPH66: 位址相同但指標型態不同 12/04 08:20
2F:→ LPH66: 使用陣列名會 decay (退化?) 成指向其首元素的指標 12/04 08:20
3F:→ LPH66: 二維陣列的一個元素是一列, 所以它會退化成指向首列的指標 12/04 08:21
4F:→ LPH66: 因此對它 + 1 就會移動一列而不是一個整數 12/04 08:21
5F:→ LPH66: 這和一維時退化就變成指向整數指標是不一樣的 12/04 08:22
感謝,已發
6F:推 cuteSquirrel: 推 關鍵在2~4樓。 12/04 11:18
7F:→ reemir: 就指標型態不同造成的 12/04 11:51
8F:推 iaminanl: array並不是pointer,只有一維的時候用起來一樣,超過 12/04 13:48
9F:→ iaminanl: 一維或是當參數傳遞時就要回歸到array的定義 12/04 13:48
10F:→ MOONRAKER: 動態多維陣列怎麼會是malloc三次 後面兩個malloc都是 12/04 17:10
11F:→ MOONRAKER: 在迴圈中 起碼也是 i*j+i+1 次 12/04 17:10
真的,沒注意到= =
12F:→ MOONRAKER: 這樣不會保障連續 自己印出位址來看 連續是你運氣好 12/04 17:11
13F:→ MOONRAKER: 不然你每次迴圈都另外malloc一個沒用到的指標就知道了 12/04 17:12
14F:→ cuteSquirrel: 在C語言裡,多維array是由數個一維array層層疊起來的 12/04 19:35
15F:推 Bencrie: 多維陣列很少用吧。不管是 video 還是 graphics 都是一維 12/04 20:51
因為要從fortran傳三維過來 有點傷腦筋要怎麼接
16F:推 LPH66: 另外要最下層元素連續的多維動態陣列是有辦法的喔 12/04 23:03
17F:→ LPH66: 二維的例子見 z-4-3-1-3 12/04 23:03
※ 編輯: silverair (114.36.126.205 臺灣), 12/05/2019 03:03:26







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP