当前位置: 首页 > news >正文

{$POINTERMATH ON} 方便指针操作的编译指令


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

相关文章:

  • SMS系列之九:SMS实现软件计数
  • 转Linux 终端中文乱码解决方法
  • VISTA 系统无法被PING通
  • Disk2vhd
  • HP SIM 5.2 安装和初步配置
  • 一个平凡女人的内心独白
  • NA-NP-IE系列实验53:帧中继环境下BMA 模式
  • God, please forgive me
  • [摘]OCM Exam Guide - OCM认证指南
  • 关于计算机基础知识的恶补(上)
  • SET IDENTITY_INSERT
  • WebService 方法特性描述
  • VC6.0 +WDK 开发驱动的环境配置
  • [架构模式实践]如何不让第三方服务/组件的故障阻碍开发和测试进度
  • RedHat AS4 下安装基于bind的DNS服务器
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Electron入门介绍
  • Java读取Properties文件的六种方法
  • js ES6 求数组的交集,并集,还有差集
  • Promise面试题2实现异步串行执行
  • python 装饰器(一)
  • Python连接Oracle
  • Spring Cloud Feign的两种使用姿势
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 基于组件的设计工作流与界面抽象
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 微信公众号开发小记——5.python微信红包
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 回归生活:清理微信公众号
  • 如何用纯 CSS 创作一个货车 loader
  • ​人工智能书单(数学基础篇)
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $.each()与$(selector).each()
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (LeetCode C++)盛最多水的容器
  • (Note)C++中的继承方式
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (六)c52学习之旅-独立按键
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET 中 GetProcess 相关方法的性能
  • .NET/C# 使窗口永不获得焦点
  • .NET中使用Protobuffer 实现序列化和反序列化
  • :O)修改linux硬件时间
  • @EnableConfigurationProperties注解使用
  • [1181]linux两台服务器之间传输文件和文件夹
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析
  • [BZOJ 1032][JSOI2007]祖码Zuma(区间Dp)
  • [BZOJ1040][P2607][ZJOI2008]骑士[树形DP+基环树]
  • [C#]winform制作圆形进度条好用的圆环圆形进度条控件和使用方法
  • [C]整形提升(转载)
  • [IE技巧] 使IE8以单进程的模式运行