作者VictorTom (鬼翼&娃娃鱼)
看板C_and_CPP
标题Re: [问题] 二维阵列传递问题
时间Tue Feb 17 17:53:15 2009
※ 引述《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)