随笔 - 2146  文章 - 19 评论 - 11846 阅读 - 1267万


编译指令 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;

posted on   万一  阅读(4543)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
历史上的今天:
2007-12-07 虚拟键码对照表
2007-12-07 相关网站链接
2007-12-07 获取当前系统版本号
2007-12-07 ASCII 码对照表
2007-12-07 属性的自动完成
2007-12-07 创建并调用 DLL(1)


点击右上角即可分享
微信分享提示