Delphi 记录类型- 结构指针
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
end; var
Form1: TForm1; implementation {$R *.dfm} type
TRec = record {定义结构 TRec}
name: string[];
age: Word;
end;
TPRec = ^TRec; {定义 TRec 结构的指针类型 TPRec} var
Rec: TRec; {声明结构变量}
PRec1,PRec2: TPRec; {声明 TPRec 指针变量}
PRec3: ^TRec; {声明 TRec 结构的指针变量, 现在 PRec1 与 PRec3 是不同类型的变量}
P: Pointer; {声明无类型指针} //通过结构指针访问结构
procedure TForm1.Button1Click(Sender: TObject);
begin
Rec.name := '张三';
Rec.age := ; PRec1 := @Rec; {把 Rec 的地址告诉 PRec1} {本来应该这样访问}
ShowMessage(PRec1^.name); {张三} {Delphi 允许这样简单使用结构指针}
ShowMessage(PRec1.name); {张三} {如果我们通过指针修改了数据}
PRec1.name := '李四'; {那么}
ShowMessage(Rec.name); {李四}
{因为 PRec1 和 Rec 所指的是同一个数据}
end; //如果是单独使用指针, 必须先给内存
procedure TForm1.Button2Click(Sender: TObject);
begin
GetMem(PRec2, SizeOf(TRec));
PRec2.name := '王五';
PRec2.age := ; ShowMessage(PRec2.name); {王五} {手工给的内存, 必须手工释放}
FreeMem(PRec2);
end; //虽是同一个结构的指针, 但还不是一个类型
procedure TForm1.Button3Click(Sender: TObject);
begin
Rec.name := '孙六';
Rec.age := ; {把 Rec 的地址给属于 ^Rec 类型的 PRec3 指针}
PRec3 := @Rec;
ShowMessage(PRec3.name); {孙六} {如果要把 PRec3 知道的值告诉 PRec1, 需要类型转换}
PRec1 := TPRec(PRec3);
ShowMessage(PRec1.name); {孙六} {反过来想, 如果要把 PRec1 知道的值告诉 PRec3 呢?}
Rec.name := '赵七';
Rec.age := ;
PRec1 := @Rec;
ShowMessage(PRec1.name); {赵七} {这样转换}
TPRec(PRec3) := PRec1;
ShowMessage(PRec3.name); {赵七}
end; //用无类型指针读写 TRec 中的数据
procedure TForm1.Button4Click(Sender: TObject);
begin
Rec.name := '杜八';
Rec.age := ; P := @Rec; {赋值}
TPRec(P).name := '侯九'; {取值}
ShowMessage(TPRec(P).name); {侯九}
end; end.
Delphi 记录类型- 结构指针的更多相关文章
- Delphi 的类型与指针
		
Delphi 的指针分为 "类型指针" 和 "无类型指针" 两类.Delphi 中的类型, 常用的也得有几百个, 我们可以给每种类型定义相应的类型指针.其实 D ...
 - delphi 数组类型与数组指针的巧妙利用
		
{本例通过存取结构, 慢慢引入了数组类型与指针的一些使用方法; 其中六个小例子的测试内容和结果都是一样的. ---------------------------------------------- ...
 - Delphi 中的结构体与结构体指针
		
好多程序都给结构体变量设定了一个结构体指针 例如: PAbc = ^TAbc; TAbc = record a: string[10]; b: string[5]; c: string[1]; end ...
 - C语言中FILE是结构体,文件类型的指针
		
c语言文件类型指针 我们在定义文件类型指针变量后,称作该指针指向该文件,但本质上,它不是指向一个存储文件信息的结构型变量么?那么我们在用各个函数对所谓的“文件指针”进行操作时,本质上是不是函数通过获取 ...
 - Oracle-4 - :超级适合初学者的入门级笔记:plsql,基本语法,记录类型,循环,游标,异常处理,存储过程,存储函数,触发器
		
初学者可以从查询到现在的pl/sql的内容都可以在我这里的笔记中找到,希望能帮到大家,视频资源在 资源, 我自己的全套笔记在 笔记 在pl/sql中可以继续使用的sql关键字有:update del ...
 - MySQL数据库储存引擎Inoodb一--记录储存结构
		
在开文我先说明一下,接下来的数据库知识文章都是在微信公众号“我们都是小青蛙”学习然后在通过自己的理解进行书写的.有兴趣的朋友可以去关注这个微信公众号.话不多说,我们在日常使用数据库进行数据持 久化的时 ...
 - Delphi中的函数指针判断是否为空
		
delphi函数指针 只有@@p才代表了函数指针本身的地址 assigned(p) 判断是否为空 或者用 @p=nil 来判断函数指针是不是为空 Delphi中的函数指针实际上就是指针,只是在使用 ...
 - delphi中一切皆指针
		
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Form ...
 - 域名注册域名解析域名绑定 dns服务器解析 域名记录的添加 记录类型含义@ www 访问域名请求过程
		
创建一个web应用,简言之就是访问一个域名,可以到达一个地方,这个地方就是你存放供别人查看的文件的地方 就像一条绳,从这头拉一下,可以拉出来另一头的东西 主要有两个部分: 域名 虚拟主机(空间) 1. ...
 
随机推荐
- hdu 4584 水题爽一发 *
			
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #i ...
 - UVALive 6884 GREAT + SWERC = PORTO dfs模拟
			
题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show ...
 - Codeforces Gym 100342J Problem J. Triatrip   求三元环的数量 bitset
			
Problem J. Triatrip Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/at ...
 - android去掉标题栏
			
在AndroidManifest.xml修改 把 <applicationandroid:allowBackup="true"android:icon="@draw ...
 - Android Bitmap详细介绍
			
package com.testbitmapscale; import java.io.File; import java.io.FileInputStream; import java.io.Fil ...
 - Animator窗口视图Project视图PlayerIdleAnimation和PlayerWalkingAnimation
			
Animator窗口视图Project视图PlayerIdleAnimation和PlayerWalkingAnimation 通过上一小节的操作,我们新建了2个动画:PlayerIdleAnimat ...
 - struts2总结四:Action与Form表单的交互
			
struts2 Action获取表单数据的方式有三种:1.通过属性驱动的方式.2.模型驱动方式.3.使用多个model对象的属性. 1.通过属性驱动式 首先在jsp里面编写form表单的代码如下: & ...
 - BZOJ2819 Nim(DFS序)
			
题目:单点修改.树链查询. 可以直接用树链剖分做.. 修改是O(QlogN),查询是O(QlogNlogN),Q=N=500000: 听说会超时.. 这题也可以用DFS序来做. 先不看修改,单单查询: ...
 - LightOJ1158 Anagram Division(状压DP)
			
题目问一个数字字符串的不重复全排列有几个能被d整除. dp[S][m]表示用字符集合S构成的%d为m的数字字符串个数 dp[0][0]=0 我为人人转移,dp[S+{x}][(m*10+str[x]- ...
 - Underscore.js 中 _.throttle 和 _.debounce 的差异
			
两个方法都是用来控制事件的频率的,在mousemove,resize等这种高频率触发事件中,控制其响应频率可以明显提高程序的流畅性,减少资源的占用. 通过分析其源代码: _.throttle方法源码 ...