Delphi中如何将数组转换为指针?

Delphi中如何将数组转换为指针?,第1张

我觉得你应该先搞清楚WriteBuffer写入的时候是按照多少字节写入的,也就是说是1字节、2字节还是其它。

一般如果仅仅是内存区域的话,我觉得按1字节的可能性最大,这样就存在问题了,你定义的是bufBit: Array of IntegerInteger在Delphi中是4字节的,你要是转化的话建议转化为Byte指针比较好:

var

BP: PByte

begin

BP:= PBYTE(@BufBit[0])

//处理部分

end

呵呵,未验证,仅供参考

另外,一楼所说很有道理!

1、看你WriteBuffer的写法似乎是为了和C语法兼容,未指定长度的话可能会以 0 作为结束符,需要注意。

2、或者里面隐含处理的长度,这样的写法不安全,可能会造成未知的错误,或让程序崩溃!

动态数组变量本身,实际上就是一个指针了,不需要再专门去定义一个指向动态数组的指针。

比如:

A, B: array of Integer

begin

SetLength(A, 1)

A[0] := 1

B := A

end

动态数组变量B,它指向动态数组A的内容,即B[0] =A[0] = 1修改B[0],A[0]的值也变了。

我告诉你:

加1和加2完全是由指针类型来确定的,指针类型如果是pansichar那么加1则是指向下一个字节的地址,如果指针类型是pwidechar则加1指向下两个字节位置。

内存是一片连续的存储单元,以字节为单位,从内存中存取数据时计算机会根据不同类型大小去计算该取哪段数据给程序。

比如一个指针指向 $10000的位置,如果你要取一个byte数据,那么系统会将

$10000处的内容给你。如果你要取一个integer型数据,那么系统会将$10000至$10003的内容给你。因为byte一个字节,integer是4个字节,其它等等都是这么个道理。

再说这个数组,其实也是使用连续一段地址来储存的,array[0..100] of byte则在内存中是@array[0]之后的边续100个byte

如果将首地址加1则指向第二个元素,加2则指向第三个元素,以此类推。。。。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/807883.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-08-29
下一篇2023-08-29

发表评论

登录后才能评论

评论列表(0条)

    保存