16,748
社区成员
发帖
与我相关
我的任务
分享
TByteArr = array[0..0] of Byte;
PBytearr = ^TByteArr;
tpara = packed record
Command : array[0..3] of char;
Length : integer;
Reserverd : array[0..1] of byte;
Status : array[0..1] of byte;
Paralist : PBytearr;
end;
procedure TForm1.btn1Click(Sender: TObject);
var b : array of byte;
i : integer;
begin
setlength(b,5);
for i := 0 to 4 do b[i]:= i * $01;
GetMem(gtpara.Paralist,5 * SizeOf(gtpara.Paralist^));
CopyMemory(gtpara.Paralist,@b[0],5 * SizeOf(gtpara.Paralist^));
for i := 0 to 4 do ShowMessage(IntToStr(TByteArr(gtpara.Paralist^)[i]));
//访问的时候,你可以通过指针移动的方式来访问,而不能直接以下标的形式访问
//如:TByteArr(gtpara.Paralist^)[2] ;//错误
//通过指针移动的方式
inc(LongWord(gtpara.Paralist),2 * SizeOf(gtpara.Paralist^));
ShowMessage(IntToStr(Byte(gtpara.Paralist^)));
.....
...
...
Freemem(gtpara.Paralist,5 * SizeOf(gtpara.Paralist^));
b := nil;