编译指令 PointerMath 默认 off; 打开后, 可以像数组一样地读写指针中的系列数据, 非常方便!
//测试整数指针 procedure TForm1.Button1Click(Sender: TObject); var p: PInteger; i: Integer; begin {$POINTERMATH ON} //写入 p := GetMemory(SizeOf(Integer) * 4); p[0] := 11; p[1] := 22; p[2] := 33; p[3] := 44; //读取 ShowMessageFmt('%d, %d, %d, %d', [p[0], p[1], p[2], p[3]]); {$POINTERMATH OFF} //之前有时会这么麻烦 ShowMessageFmt('%d, %d, %d, %d', [p^, PInteger(Integer(p) + SizeOf(Integer) * 1)^, PInteger(Integer(p) + SizeOf(Integer) * 2)^, PInteger(Integer(p) + SizeOf(Integer) * 3)^]); FreeMemory(p); end; //测试结构体指针 procedure TForm1.Button2Click(Sender: TObject); type TMyRec = record Name: string[12]; Age: Word; end; var p: ^TMyRec; begin {$POINTERMATH ON} p := GetMemory(SizeOf(TMyRec) * 2); //写入 p[0].Name := '张三'; p[0].Age := 11; p[1].Name := '李四'; p[1].Age := 22; //读取 ShowMessageFmt('%s, %d', [p[0].Name, p[0].Age]); ShowMessageFmt('%s, %d', [p[1].Name, p[1].Age]); FreeMemory(p); {$POINTERMATH OFF} end;