Delphi 记录类型- 结构指针

转自:万一老师的 Delphi 博客

  1. unit Unit1;   
  2.   
  3. interface  
  4.   
  5. uses  
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   
  7.   Dialogs, StdCtrls;   
  8.   
  9. type  
  10.   TForm1 = class(TForm)   
  11.     Button1: TButton;   
  12.     Button2: TButton;   
  13.     Button3: TButton;   
  14.     Button4: TButton;   
  15.     procedure Button1Click(Sender: TObject);   
  16.     procedure Button2Click(Sender: TObject);   
  17.     procedure Button3Click(Sender: TObject);   
  18.     procedure Button4Click(Sender: TObject);   
  19.   end;   
  20.   
  21. var  
  22.   Form1: TForm1;   
  23.   
  24. implementation  
  25.   
  26. {$R *.dfm}  
  27.   
  28. type  
  29.   TRec = record       {定义结构 TRec}  
  30.     name: string[12];   
  31.     age: Word;   
  32.   end;   
  33.   TPRec = ^TRec;      {定义 TRec 结构的指针类型 TPRec}  
  34.   
  35. var  
  36.   Rec:         TRec;    {声明结构变量}  
  37.   PRec1,PRec2: TPRec;   {声明 TPRec 指针变量}  
  38.   PRec3:      ^TRec;    {声明 TRec 结构的指针变量, 现在 PRec1 与 PRec3 是不同类型的变量}  
  39.   P:           Pointer; {声明无类型指针}  
  40.   
  41.   
  42. //通过结构指针访问结构   
  43. procedure TForm1.Button1Click(Sender: TObject);   
  44. begin  
  45.   Rec.name := '张三';   
  46.   Rec.age := 18;   
  47.   
  48.   PRec1 := @Rec; {把 Rec 的地址告诉 PRec1}  
  49.   
  50.   {本来应该这样访问}  
  51.   ShowMessage(PRec1^.name); {张三}  
  52.   
  53.   {Delphi 允许这样简单使用结构指针}  
  54.   ShowMessage(PRec1.name);  {张三}  
  55.   
  56.   {如果我们通过指针修改了数据}  
  57.   PRec1.name := '李四';   
  58.   
  59.   {那么}  
  60.   ShowMessage(Rec.name); {李四}  
  61.   {因为 PRec1 和 Rec 所指的是同一个数据}  
  62. end;   
  63.   
  64.   
  65. //如果是单独使用指针, 必须先给内存   
  66. procedure TForm1.Button2Click(Sender: TObject);   
  67. begin  
  68.   GetMem(PRec2, SizeOf(TRec));   
  69.   PRec2.name := '王五';   
  70.   PRec2.age := 9;   
  71.   
  72.   ShowMessage(PRec2.name); {王五}  
  73.   
  74.   {手工给的内存, 必须手工释放}  
  75.   FreeMem(PRec2);   
  76. end;   
  77.   
  78.   
  79. //虽是同一个结构的指针, 但还不是一个类型   
  80. procedure TForm1.Button3Click(Sender: TObject);   
  81. begin  
  82.   Rec.name := '孙六';   
  83.   Rec.age := 16;   
  84.   
  85.   {把 Rec 的地址给属于 ^Rec 类型的 PRec3 指针}  
  86.   PRec3 := @Rec;   
  87.   ShowMessage(PRec3.name); {孙六}  
  88.   
  89.   {如果要把 PRec3 知道的值告诉 PRec1, 需要类型转换}  
  90.   PRec1 := TPRec(PRec3);   
  91.   ShowMessage(PRec1.name); {孙六}  
  92.   
  93.   
  94.   {反过来想, 如果要把 PRec1 知道的值告诉 PRec3 呢?}  
  95.   Rec.name := '赵七';   
  96.   Rec.age := 24;   
  97.   PRec1 := @Rec;   
  98.   ShowMessage(PRec1.name); {赵七}  
  99.   
  100.   {这样转换}  
  101.   TPRec(PRec3) := PRec1;   
  102.   ShowMessage(PRec3.name); {赵七}  
  103. end;   
  104.   
  105.   
  106. //用无类型指针读写 TRec 中的数据   
  107. procedure TForm1.Button4Click(Sender: TObject);   
  108. begin  
  109.   Rec.name := '杜八';   
  110.   Rec.age := 36;   
  111.   
  112.   P := @Rec;   
  113.   
  114.   {赋值}  
  115.   TPRec(P).name := '侯九';   
  116.   
  117.   {取值}  
  118.   ShowMessage(TPRec(P).name); {侯九}  
  119. end;   
  120.   
  121. end.  

转载于:https://www.cnblogs.com/dashan9zj/archive/2008/12/22/1360054.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深圳的房价跌了

我很久没有关注深圳的房价了,上一篇关于深圳房价的文章好像还是几个月之前的,几个月之前,我一个同学买房,跟我咨询了下,然后就写了一篇文章。现在不要着急买房这篇文章从那个时候到现在已经一年了,前几天跟…

Springboot 使用Mybatis对postgreSQL实现CRUD

目录结构 1、创建一个springboot项目 选择Web、Mabatis、postgreSQL 2、在application中写入配置文件 1 #配置数据源 2 spring.datasource.platformpostgres 3 spring.datasource.urljdbc:postgresql://127.0.0.1:5432/postgres 4 spring.datasource.usernamepostgres 5 spring…

boost学习之boost::lock_guard源码分析

boost::lock_guard可以说是一种比boost::unique_lock轻量级的lock, 简单一些场景可以用它就行了。源码如下&#xff1a; template<typename Mutex> class lock_guard { private: Mutex& m; explicit lock_guard(lock_guard&); lock_guard& operator(lock…

搜索连接字符串存储过程【原创】

1、CREATE PROCEDURE dbo.SearchUserInfo (Age int ) AS SELECT * FROM UserInfo WHERE Age like %cast(Age as nvarchar(50))% RETURN 2、 CREATE PROCEDURE dbo.Mfx_SearchUserInfo --用户搜索[state-审核状态(2为全部)、UserLever-用户级别(0为全部)、keyWord(关键字)] …

mysql my.cnf 配置建议

/usr/local/share/mysql下面有5个my-xxxx.cnf文件 my-small.cnf 最小配置安装&#xff0c;内存⇐64M&#xff0c;数据数量最少 my-large.cnf 内存512M my-medium.cnf 32M<内存<64M&#xff0c;或者内存有128M&#xff0c;但是数据库与web服务器公用内存 my-huge.cnf …

不得不说,这是我面过的最优秀的Linux运维!

Linux可以说是运维之“本”。无论中小企业还是大厂&#xff0c;现在的企业有95%甚至更多是使用Linux服务器。而对于Linux运维来说&#xff0c;Linux基础越扎实、会的工具越多&#xff0c;能解决的问题就越多&#xff0c;技术也能走的更远。Linux&#xff0c;甚至可以说是进入IT…

boost学习之boost::lock_guardT与boost::unique_lockT的区别

(1)、boost::lock_guard没有unlock()功能 boost::mutex mutex; void foo( ) { boost::lock_guard<boost::mutex> lock(mutex); process(data); ///没有unlock()功能&#xff0c;程序结束自动析构 }; (2)、unique_lock允许设置超时&#xff0c;推迟锁定lock以及在对象…

用友财务软件主要数据表字段含义

用友财务软件主要数据表字段含义 /*rdrecords : 收发记录子表AutoID : auto ID 自动编号 automatism identification(identity)ID : ID 与收发记录主表关联项cInvCode : c…

重叠IO之完成例程

http://hi.baidu.com/%CC%EC%D1%C4_jmf/blog/item/7718ccd99b03cb2710df9bc2.html转载于:https://www.cnblogs.com/vcdebug2010/archive/2012/06/23/2559096.html

一个中科大「差生」的8年程序员工作总结

今年终于从大菊花厂离职了&#xff0c;离职前收入大概60w不到吧&#xff01;在某乎属于比较差的&#xff0c;今天终于有空写一下自己的职场故事&#xff0c;也算是给自己近8年的工作做个总结复盘。近8年有些事情做对了&#xff0c;也有更多事情做错了&#xff0c;在这里记录一下…

Java IO File

#file file的一些方法&#xff0c;因为windows和Linux开发环境的问题&#xff0c;在file中最好统一用 / 输出流操作 转载于:https://www.cnblogs.com/cykfory/p/10294981.html

gtest使用例子

最近使用gtest进行单元测试&#xff0c;采用打桩的形式。关于gtest的详细说明就不多说了&#xff0c;网上的资料一大堆。主要讲解使用时的参数如何配置以及遇到的问题。下面的例子模拟是加、减、乘、除四则运算&#xff0c;前提是不知道加、减、乘、除四则运算是如何实现的。 …

游戏开发中的数学和物理算法(7):角度 vs 弧度

我们通常使用的笛卡尔坐标系统&#xff0c;角点通常在(0,0),即原点。初始边在x轴正半轴&#xff0c;终边与初始边成夹角。初始边逆时针旋转为正值&#xff0c;顺时针旋转为逆值。数学表示&#xff1a;角度&#xff1a;degreeradian*180/π 弧度&#xff1a;radiandegree*π/18…

医学影像PACS系统解决方案与成功案例汇总

经历过2010年一年时间&#xff0c;HC3i论坛也与大家相伴快一年了&#xff0c;这一年中&#xff0c;网友分享专业医疗信息化资料超过15000个&#xff0c;HC3i感谢大家的支持与厚爱&#xff01;岁末年初之极&#xff0c;也整理盘点一下&#xff0c;方便大家回顾一年中精华资源&am…

npm 安装包报错 rollbackFailedOptional

npm config rm proxynpm config rm https-proxy 然后使用npm install -g cnpm --registryhttps://registry.npm.taobao.org安装淘宝的cnpm 然后就可以使用cnpm命令了转载于:https://www.cnblogs.com/xtjatswc/p/10295734.html

一个小老板的春天

大家周末好继续之前说的采访专栏&#xff0c;前两天和一个做生意的朋友聊天&#xff0c;总结了一些内容分享给大家&#xff0c;觉得不错的点赞收藏起来&#xff0c;可能后面你自己当老板了会用到。我这个老板的名字和公司名字我就不说出来了&#xff0c;他现在做的是细分领域&a…

boost学习之boost::shared_ptr

Boost智能指针——shared_ptr boost::scoped_ptr虽然简单易用&#xff0c;但它不能共享所有权的特性却大大限制了其使用范围&#xff0c;而boost::shared_ptr可以解决这一局限。顾名思义&#xff0c;boost::shared_ptr是可以共享所有权的智能指针&#xff0c;首先让我们通过一…

SharePoint GridView的使用2——DataSourceView的使用

首先创建一个abstract类&#xff0c;继承Microsoft.SharePoint.WebControls.DataTableDataSourceView。之后基于这个类可以创建多个显示不同数据的的DataSourceView&#xff0c;在上文的DataSource控件中有个ViewName属性&#xff0c;可以通过这个属性来区分不同的DataSourceVi…

瞧瞧UC浏览器对CSS样式的“关怀”

瞧瞧UC浏览器对CSS样式的“关怀” UC对CSS这样的“照顾”尤其8.0以下体现的是淋漓尽致&#xff01; 不"支持"font-family属性&#xff0c;也就是说&#xff0c;在UC浏览器你只能看到一种字体&#xff1b;不"支持"font-szie属性&#xff0c;也就是说&#…

我在ARM板上写的第一个驱动程序

有时大家喜欢拿电灯来当作笑谈&#xff0c;实际上点灯包含多内容很多&#xff0c;如下这篇文章就是关于嵌入式Linux点灯多技术栈&#xff0c;推荐给大家。摘要&#xff1a;搞嵌入式有两个方向&#xff0c;一个是嵌入式软件开发(MCU方向)&#xff0c;另一个是嵌入式软件开发(Lin…