加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi 记录类型- 结构指针

发布时间:2020-12-15 09:57:17 所属栏目:大数据 来源:网络整理
导读:Delphi 记录类型- 结构指针 unit ?Unit1; interface uses ??Windows,?Messages,?SysUtils,?Variants,?Classes,?Graphics,?Controls,?Forms, ??Dialogs,?StdCtrls; type ??TForm1?=? class (TForm) ????Button1:?TButton; ????Button2:?TButton; ????Button3:
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[12];
????age:?Word;
??end;
??TPRec?=?^TRec;??????定义?TRec?结构的指针类型?TPRecvar
??Rec:?????????TRec;????声明结构变量}
??PRec1,PRec2:?TPRec;???声明?TPRec?指针变量}
??PRec3:??????^TRec;????声明?TRec?结构的指针变量,?现在?PRec1?与?PRec3?是不同类型的变量}
??P:???????????Pointer;?声明无类型指针}


//通过结构指针访问结构
procedure?TForm1.Button1Click(Sender:?TObject);
begin
??Rec.name?:=?'张三';
??Rec.age?:=?18;

??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?:=?9;

??ShowMessage(PRec2.name);?王五手工给的内存,?必须手工释放}
??FreeMem(PRec2);
end;


//虽是同一个结构的指针,?但还不是一个类型
procedure?TForm1.Button3Click(Sender:?TObject);
孙六16;

??把?Rec?的地址给属于?^Rec?类型的?PRec3?指针}
??PRec3?:=?@Rec;
??ShowMessage(PRec3.name);?孙六如果要把?PRec3?知道的值告诉?PRec1,?需要类型转换}
??PRec1?:=?TPRec(PRec3);
??ShowMessage(PRec1.name);?}


??反过来想,?如果要把?PRec1?知道的值告诉?PRec3?呢?}
??Rec.name?:=?赵七24;
??PRec1?:=?@Rec;
??ShowMessage(PRec1.name);?赵七这样转换}
??TPRec(PRec3)?:=?PRec1;
??ShowMessage(PRec3.name);?end;


//用无类型指针读写?TRec?中的数据
procedure?TForm1.Button4Click(Sender:?TObject);
杜八36;

??P?:=?@Rec;

??赋值}
??TPRec(P).name?:=?侯九取值}
??ShowMessage(TPRec(P).name);?侯九end.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读