type {先定义结构和结构指针} PMyRec = ^TMyRec; TMyRec = record F1: Char; F2: Word; end;
{用静态数组储存或读写结构很方便} procedure TForm1.Button1Click(Sender: TObject); var ArrRec: array[0..2] of TMyRec; i: Integer; begin {写入} for i := 0 to 2 do begin ArrRec[i].F1 := Chr(i+65); ArrRec[i].F2 := (i+1) * 10; end;
{读取} for i := 0 to Length(ArrRec) - 1 do ShowMessageFmt('%s, %d', [ArrRec[i].F1, ArrRec[i].F2]); end;
{这个只是定义了一块内存, 没用数组的概念, 有点麻烦} procedure TForm1.Button2Click(Sender: TObject); var buf: PMyRec; begin GetMem(buf, SizeOf(TMyRec) * 3); {申请内存}
{可以给结构定义一个数组类型} procedure TForm1.Button3Click(Sender: TObject); type TArr = array of TMyRec; var buf: PMyRec; i: Integer; begin GetMem(buf, SizeOf(TMyRec) * 3);
for i := 0 to 2 do begin TArr(buf)[i].F1 := Chr(i+65); TArr(buf)[i].F2 := (i+1) * 10; end;
for i := 0 to 2 do ShowMessageFmt('%s, %d', [TArr(buf)[i].F1, TArr(buf)[i].F2]);
FreeMem(buf); end;
{直接用动态数组也行} procedure TForm1.Button4Click(Sender: TObject); var Arr: array of TMyRec; i: Integer; begin SetLength(Arr, 3); for i := 0 to 2 do begin Arr[i].F1 := Chr(i+65); Arr[i].F2 := (i+1) * 10; end;
for i := 0 to 2 do ShowMessageFmt('%s, %d', [Arr[i].F1, Arr[i].F2]); end;
{使用一个元素的数组指针, 这是很常用的} procedure TForm1.Button5Click(Sender: TObject); type PArr = ^TArr; TArr = array[0..0] of TMyRec; var buf: PArr; i: Integer; begin GetMem(buf, SizeOf(TMyRec) * 3);
for i := 0 to 2 do begin buf^[i].F1 := Chr(i+65); buf^[i].F2 := (i+1) * 10; end;