Re: [問題] 二維陣列傳遞問題
※ 引述《uncleuse (Uncleuse)》之銘言:
: 推 VictorTom:應該有差吧? print 指標 Num+5 和 Num[1] 試試看 @_@" 02/17 12:30
: → VictorTom:記憶體是連續的觀念沒錯, 但是Num是2D ptr的時候.... 02/17 12:30
: → VictorTom:Num + CONST後的位置會指到的地方不太對吧....?_? 02/17 12:31
: → VictorTom:或者如你所想的試試Num+5 vs (int*)Num+5 的值 ?_? 02/17 12:33
: → uncleuse:記憶體位址真的不一樣... 02/17 17:22
: → uncleuse:請問宣告Num[2][5]之後, Num[1]是誰的位址呢? 02/17 17:25
: → uncleuse:還有(int*)Num是什麼意思呢? 02/17 17:26
: → uncleuse:我剛初學, 還請大家多多指教~~謝謝!!!! 02/17 17:28
Concept來說, 您的int Num[2][5]的Layout是這樣子的....
Num[0]: {1, 2, 3, 4, 5}
Num[1]: {6, 7, 8, 9, 10}
如您的認知, 這個case裡面其實記憶體是連續的, 所以....
Num: { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10} }
以您的case, 您希望的Num+5 => 取到6, 是在Num為 int*的情況....
目前的Num的型態是int (*)[5], 您可以參照原來build error的訊息....
這個型態用白話文講: 指向5個int一個array的指標, 應該是啦^^||
(可以回去看上面Num[0]和Num[1], 應該會比較有感覺一點點@_@")
(int*)Num的意思就是強迫把Num轉型成(int*), 這才是您預期的....
否則, 當您Num+1的時候, 其實它是一次跳了sizeof(int) x 5....
因為, Num是一個"指向5個int一個array的指標"(+5早超過您的array range了)
您可以試著計算一下Num+5, Num[1], (int*)Num+5與Num的差值看看:)
換句話說, 指標+-值的操作到底會指到哪裡, 是要考慮好其型態的....
以上, 小弟也不是這方面的行家, 再和大家討論一下<(_ _)>
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.66.243.96
※ 編輯: VictorTom 來自: 61.66.243.96 (02/17 17:55)
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章