TNodeMyInfo=record
    bRootNode:Boolean;
    bVisitored:Boolean;
    Info:HKey;
    Index:Integer;
  end;
 PNodeInfo=^TNodeMyInfo;procedure TForm1.FormCreate(Sender:TObject);
  P:PNodeInfo;
  tempNode:TTreeNode;
begin
  New(P);
  P.bRootNode :=bRoot;
  P.Info :=Info;
  P.Index :=Index;
  P.bVisitored :=False;
  Node.Data:=P;
请问为什么要定义一个指针类型PNodeInfo?而如果直接用TNodeMyInfo这个记录类型放到程序中也可以。在什么情况下用指针类型呢?
另外,HKEY这个是什么类型?

解决方案 »

  1.   

    需要动态增删的内容一般都可以考虑用指针。
    HKey是自定义的类型吧。
      

  2.   

    在你的代码中,Node.Data 是指针类型,如果p是相全局性的变量,可以不使用指针,Node.Data := @p
    但是如果是局部变量,就需要使用指针,并且使用new或者Getmem为指针动态分配内存。因为局部变量在函数或过程退出后就自动消失了,动态分配的内存是在程序堆上分配的,相当于全局变量,只不过用完后要释放内存。
      

  3.   

    另外,你粘贴的代码有错误,p.xxx 应该为p^.xxx
      

  4.   

    我运行程序并没有报错啊?
    只是出现提示:[Warning]Unit1.pas(161):Unsafe type 'Data:Pointer'
    为什么会出现这个提示?我用了p^.xxx还是会出现.
    并且我看HKEY的定义,它是在WINDOWS单元中定义的,
        HKEY = type LongWord;
    type Longword这种形式是什么意思?它是32位无符号整数吗?这个type起什么作用?
      

  5.   

    1、在你的源码中,p的确是指针类型,引用指针类型指向的记录成员必须是p^.xxx格式,至于你的程序不报错,我不得而知。
        2、你使用的可能是Delphi6.0以上版本,对指针类型转换提出移植警告:Unsafe type 'Data:Pointer',因为p是PNodeInfo指针类型,而Node.Data是无类型指针类型Pointer.
        3、HKEY = type LongWord 同 HKEY = LongWord在使用上应该没有什么区别,不过是表现方式不同,如c++的
    #define HKEY    LongWord 和
    typedef LongWord  HKEY 一样,前者定义的是宏,后者是定义一个新类型。但在使用上完全感觉不出来。
      

  6.   

    Node.Data  是一个指针,需要动态分配