剛剛在群裡看到一個這樣的問題
咋一看,以為是把裡面的值進行累加,後來一想應該是移動一下指針。
對于這種移動指針的做法有兩個錯誤:
第一個是用了Integer,來轉換指針如果在32位下面顯然是沒有問題的,但是如果是64位,指針是64位,顯然再用Integer是錯誤的。
第二個轉換成Ineger後加一,那就相當于整數值 + 1,在PByte時沒有問題,因為Byte也是一個位元組。但是如果是PInteger指針就會出現錯誤。
我們來看下代碼:
如果是PInteger下面應該怎麼樣做:
首先所有的指針都是一個整數值

可以看到如果用inc移動指針,并且會按照指針的類型進行累加,上面PInteger類型Inc後是增加的SizeOf(Integer)。指向數組的下一個元素。
如果單純的轉換成整數來 + 1會 指針的值就是$12EA75顯然不是指向下一個元素。當然你取到的值也是錯誤的。如下面的圖
顯然d^不是我們想要的資料。
除了用inc,也可以這樣做,下面的做法也是正确的。
請操作指針的朋友們注意啦。
*以上代碼在XE6下面測試運作
*注意沒有IntPtr類型的可以自己定義下類型
type
IntPtr = cardinal
==========================================
<a href="http://www.diocp.org/">http://www.diocp.org/</a>