zoukankan      html  css  js  c++  java
  • Delphi7 PAnsiChar String 结构指针

    procedure TForm1.Button1Click(Sender: TObject);
    type
      PPersonInfo = ^PersonInfo;
      PersonInfo = record
        Age: Integer;
        C: Char;
        Name:String[12];
      end;
    var
      MyList: TList;
      person: PPersonInfo;
      B: Byte;
      Y: Word;
      S:String;
    begin
      MyList := TList.Create();

      New(person);
      person^.Age := 100;
      person^.C := 'Z';
      person^.Name:='张三';
      MyList.Add(person); //加入一个100的整数和Z字符

      New(person);
      person^.Age := 200;
      person^.C := 'X';
      person^.Name:='李四';

      //ShowMessage(person^.Name);
      //MessageBox(self.Handle,(PAnsiChar(IntToStr(person^.Age))),'test',0);
      //S:=person^.Name;
      //MessageBox(self.Handle,PAnsiChar(AnsiString(S)),'test',0);

      ShowMessage(PPersonInfo(MyList.Items[0])^.Name); //先转为pPersons

      MyList.Add(person); //加入一个200的整数和X字符


      //ARecord := MyList.Items[0];


      Y := 10;
      for B := 0 to (MyList.Count - 1) do begin
        person := MyList.Items[B];
        Canvas.TextOut(10, Y, IntToStr(person^.Age)+person^.Name);
        Y := Y + 30;
        Canvas.TextOut(10, Y, person^.C);
        Y := Y + 30;
      end;

      for B := 0 to (MyList.Count - 1) do begin
        person := MyList.Items[B];
        Dispose(person);
      end;
      MyList.Free();

    end;

    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 结构的指针类型 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.
     

  • 相关阅读:
    解析XML技术
    XML名命空间
    XML解析器
    java列表组件鼠标双击事件的实现
    XML(可拓展标记语言)基本概念
    数据包式套接字:基于UDP协议的Socket网络编程
    流式套接字:基于TCP协议的Socket网络编程(案例3)
    剑指 Offer 58
    剑指 Offer 58
    剑指 Offer 57
  • 原文地址:https://www.cnblogs.com/yansc/p/2330195.html
Copyright © 2011-2022 走看看