Delphi : record 记录类型 - 结构指针

来源:互联网 发布:c专家编程 c和指针 编辑:程序博客网 时间:2024/06/07 07:03
unitUnit1; 
  
  
interface  
  
uses  
  Windows, Messages, SysUtils, Variants, Classes,Graphics, Controls,Forms,   
  Dialogs,StdCtrls;   
  
type  
  TForm1 =class(TForm)   
    Button1:TButton;   
    Button2:TButton;   
    Button3:TButton;   
    Button4:TButton;   
    procedureButton1Click(Sender:TObject);   
    procedureButton2Click(Sender:TObject);   
    procedureButton3Click(Sender:TObject);   
    procedureButton4Click(Sender:TObject);   
 end;   
  
var  
  Form1:TForm1;   
  
implementation  
  
{$R *.dfm}  
  
type  
  TRec =record      {定义结构 TRec}  
    name:string[12];   
    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 :=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);   
begin  
  Rec.name :='孙六';   
  Rec.age :=16;   
  
  {把 Rec 的地址给属于 ^Rec 类型的 PRec3指针}  
  PRec3 :=@Rec;   
  ShowMessage(PRec3.name);{孙六}  
  
  {如果要把 PRec3 知道的值告诉 PRec1,需要类型转换}  
  PRec1 :=TPRec(PRec3);   
  ShowMessage(PRec1.name);{孙六}  
  
  
  {反过来想, 如果要把 PRec1 知道的值告诉 PRec3呢?}  
  Rec.name :='赵七';   
  Rec.age :=24;   
  PRec1 :=@Rec;   
  ShowMessage(PRec1.name);{赵七}  
  
  {这样转换}  
  TPRec(PRec3) :=PRec1;   
  ShowMessage(PRec3.name);{赵七}  
end;   
  
  
//用无类型指针读写 TRec中的数据   
procedure TForm1.Button4Click(Sender:TObject);   
begin  
  Rec.name :='杜八';   
  Rec.age :=36;   
  
  P :=@Rec;   
  
  {赋值}  
  TPRec(P).name :='侯九';   
  
  {取值}  
  ShowMessage(TPRec(P).name);{侯九}  
end;   
  
end.  

来源:http://blog.sina.com.cn/s/blog_4ad042e50102e1nd.html
0 0
原创粉丝点击