看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《Arim (Arim5566)》之銘言: : 小弟愚昧,請問一下 : int dis[20][20]; //這是一個二維陣列,dis指向一個二維陣列 : int **p; : 一般做動態陣列的時候,可以使p指向一個二維的陣列 : 現在我不做動態配置,直接利用assignment: p=dis; : 將dis的位址assign給 p,可是compile不會給我過 : 如果同樣的問題用一維的陣列就可以過 : 請問這是為什麼呢?? 簡單的來說, 這是因為 type 不同所導致的 20有點長 , 用 int dis[2][2]; 來說好了 他的記憶體配置是這樣的連續分佈 (type: int) ↗ ↑ ↑ ↖ [0][0] [0][1] [1][0] [1][1] ┌───┬───┬───┬───┐ dis│ │ │ │ │ └───┴───┴───┴───┘ dis[0] dis[1] 其中 dis, dis[0], dis[1] 都是陣列 而如果是 int **p; 的話, 則是像下圖那樣 p[0] p[1] ┌─┐ ┌──┬──┐ (type: int*) p │ ┼──→ │ │ │ └─┘ └─┼┴─┼┘ p[0][0] p[0][1] (type: int**) │ │ ┌───┬───┐ ╰──┼────→│ │ │ (type: int) │ └───┴───┘ │ p[1][0] p[1][1] │ ┌───┬───┐ ╰────→│ │ │ (type: int) └───┴───┘ 這三塊記憶體都不一定是連續的 所以雖然兩個都是二維陣列 但是其實記憶體配置方式差滿多的 -- 舊圖新PO XD -- 人家可不是為了你才這樣做的哦! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.198.35.85
Arim:感謝 02/14 22:16
VictorTom:dis->出去那格怪怪的吧?? 這個case裡, dis的位址剛好也 02/14 23:27
VictorTom:是dis[0][0]的位址不是嗎@_@" 02/14 23:27
williamyu:好圖! 02/15 09:53
Arim:再問一下 如果是dis[2][3][4] 那dis的type是什麼?? 02/15 10:51
Arim:是int(*)[2][3]嗎? 02/15 11:05
Arim:說錯 是int(*)[3][4]嗎 02/15 11:05
LPH66:指向 dis 的指標的確是 int(*)[3][4] 無誤 02/15 12:08
s3748679:應該是這樣吧: dis = &(dis[0]) ,*dis == &(dis[0][0]) 02/15 17:15
s3748679:所以...dis應該不是直接指向dis[0][0] 02/15 17:17
s3748679:不過是真的連續...(我原本不知道說,筆記筆記...) 02/15 17:17
VictorTom:樓上, 試著印一下 dis, dis[0], *dis, &dis[0], 02/15 17:41
VictorTom:&dis[0][0], 以及 &dis 試試....~_~ 02/15 17:42
VictorTom:另外, 陣列跟指標使用上也許有點像, 但請不要真的完全用 02/15 17:42
VictorTom:一樣的概念去看; 試試任意 array[] 與 &array 吧:) 02/15 17:43
s3748679:...感謝樓上V大,原來是小弟我本身測試上的問題.... 02/15 18:45
thx! ※ 編輯: dendrobium 來自: 60.198.35.85 (02/15 19:13) ※ 編輯: dendrobium 來自: 60.198.35.85 (02/15 19:29)
VictorTom:d大辛苦, 推一下好圖:) 02/15 21:48
dendrobium:不辛苦~ 有所收穫比較重要~ 02/15 21:56