请教关于数组传参的问题

gwtaa 2009-07-07 01:56:46
type
TDynArrayByte = array of Byte;

rbuf : TDynArrayByte;

function ChangeToLong(const A : TDynArrayByte):Longint;



SetLength(rbuf, 256);


function TForm1.ChangeToLong(const A : TDynArrayByte):Longint;
var
Data : TDynArrayByte;
begin
SetLength(Data,8);
Data := A;

Result := Data[1] + Data[2] +
Data[3] + Data[4] +
Data[5] + Data[6] +
Data[7] + Data[8];
end;



DownData1 := ChangeToLong(@rbuf[5]);


这是源代码,运行时发生错误,
而如果最后一句改为DownData1 := ChangeToLong(rbuf[5]);则编译不过

请问应该如何传递数组?谢谢
...全文
52 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Seamour 2009-07-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kfcoffe 的回复:]
lz 这貌似没错啊。DownData1 := ChangeToLong(@rbuf[5]);
像你这种写法是把第6个元素的地址传过去。
然后Data := A; 即data指向rbuf中第6个元素。
然后相加其后的8个元素。
不知道你编译的时候出现什么错误。

[/Quote]
现在我终于明白,为啥好多我看不懂人家想干嘛的东西,别人能够无障碍交流了
编译器发展到今天,仍然没有发展到有足够的创意,足以能明白中国码农们到底想干嘛
kfcoffe 2009-07-07
  • 打赏
  • 举报
回复
lz 这貌似没错啊。DownData1 := ChangeToLong(@rbuf[5]);
像你这种写法是把第6个元素的地址传过去。
然后Data := A; 即data指向rbuf中第6个元素。
然后相加其后的8个元素。
不知道你编译的时候出现什么错误。
notebook800 2009-07-07
  • 打赏
  • 举报
回复


DownData1 := ChangeToLong(@rbuf);

function TForm1.ChangeToLong(const Buffer: Pointer): Longint;
var
Info: string;
Data: TDynArrayByte;
begin
SetLength(Data, 8); //? 废话
Data := TDynArrayByte(Buffer^);
Result := Data[1] + Data[2] +
Data[3] + Data[4] +
Data[5] + Data[6] +
Data[7] + Data[8];
end;

火龙岛主 2009-07-07
  • 打赏
  • 举报
回复
DownData1 := ChangeToLong(@rbuf[5]);//类型不匹配

DownData1 := ChangeToLong(rbuf);
火龙岛主 2009-07-07
  • 打赏
  • 举报
回复
Result := Data[0] + Data[1] + Data[2] +
Data[3] + Data[4] +
Data[5] + Data[6] +
Data[7];
bdmh 2009-07-07
  • 打赏
  • 举报
回复
你哪报错呀
DownData1 := ChangeToLong(rbuf[5]);肯定编译不过,rbuf[5]这是TDynArrayByte类型吗
gwtaa 2009-07-07
  • 打赏
  • 举报
回复
没人知道怎么搞吗?

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧