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

有个函数,原型为WriteBuffer(pBuffer:Pointer),作用是把某些数据写到pBuffer指向的内存区域里,现在我有个Integer数组:varbufB... 有个函数,原型为WriteBuffer(pBuffer: Pointer),作用是把某些数据写到pBuffer指向的内存区域里,
现在我有个Integer数组:var bufBit: Array of Integer;
我如何把这个数组作为Pointer传给这个函数呢?是写成@bufBit,还是@bufBit[0],还是直接bufBit?
展开
 我来答
alctel112358
2012-02-14 · 超过30用户采纳过TA的回答
知道答主
回答量:97
采纳率:0%
帮助的人:85.8万
展开全部
我觉得你应该先搞清楚WriteBuffer写入的时候是按照多少字节写入的,也就是说是1字节、2字节还是其它。
一般如果仅仅是内存区域的话,我觉得按1字节的可能性最大,这样就存在问题了,你定义的是bufBit: Array of Integer; Integer在Delphi中是4字节的,你要是转化的话建议转化为Byte指针比较好:
var
BP: PByte;
begin
BP:= PBYTE(@BufBit[0]);
//处理部分
end;

呵呵,未验证,仅供参考

另外,一楼所说很有道理!
1、看你WriteBuffer的写法似乎是为了和C语法兼容,未指定长度的话可能会以 0 作为结束符,需要注意。
2、或者里面隐含处理的长度,这样的写法不安全,可能会造成未知的错误,或让程序崩溃!
可以叫我表哥
2015-09-09 · 知道合伙人数码行家
可以叫我表哥
知道合伙人数码行家
采纳数:25897 获赞数:1464972
2010年毕业于北京化工大学北方学院计算机科学与技术专业毕业,学士学位,工程电子技术行业4年从业经验。

向TA提问 私信TA
展开全部
关于DELPHI数组,指针,字符串转换的例子:

var
aa: array [0..5] of Char;
bb:Pointer;
cc:string;
dd:PChar;

procedure TForm1.Button1Click(Sender: TObject);
begin

dd:='abcdef';
//以下是pchar内容转数组
FillChar(aa,length(dd),#0);
Move(dd^,aa,SizeOf(aa));
//以下是数组传递到指针
bb:=GetMemory(SizeOf(aa));
Move(aa,bb^,SizeOf(aa));
//以下是指针内容传递给字符串
SetLength(cc,SizeOf(aa));
Move(bb^,cc[1],SizeOf(aa));
FreeMemory(bb);//这个是释放内存
//以下是数组转pchar
dd:='';
dd:=PChar(@aa);
MessageBox(0,PChar('cc: '+cc),PChar('dd: '+dd),0);

end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
文句子
2012-03-27
知道答主
回答量:1
采纳率:0%
帮助的人:1625
展开全部
@bufBit,还是@bufBit[0]
如果bufBit定义的下标是从0开始的,二种写法没有区别,效果一样。@是肯定都要带着的。
但是你的数组如果仅仅是写了“var bufBit: Array of Integer;”,肯定不能直接拿来引用。
引用前要么动态分配一下,要么直接重新定义成固定长度的数组,如array [0..BUFMAXSIZE-1]of Integer;。pascal不像C,它定义数组的下标可以不从0开始。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9308069
2012-02-14 · TA获得超过1万个赞
知道大有可为答主
回答量:3947
采纳率:89%
帮助的人:1851万
展开全部
需要另外设一个指针变量
var ptr:^integer;
begin
ptr=@bufBit[0];
WriteBuffer(ptr);
不过,很少有WriteBuffer(pBuffer: Pointer)这样只写指针的函数(一般还有个长度参数),所以所给出的只保证语法正确,不保证能正确使用WriteBuffer.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ayi033
2012-02-14 · TA获得超过144个赞
知道小有建树答主
回答量:317
采纳率:100%
帮助的人:101万
展开全部
@bufBit[0]就可以了,会自动转换的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式