Re: [問題] 二維陣列傳遞問題

看板C_and_CPP (C/C++)作者 (鬼翼&娃娃魚)時間16年前 (2009/02/17 17:53), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《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)
文章代碼(AID): #19ceaCaF (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #19ceaCaF (C_and_CPP)