很神奇如下:
program Project1;{$APPTYPE CONSOLE}uses
  Dialogs, SysUtils, IniFiles;
type
  LUTEST = Record
    abc: Integer;
    ccc: Double;
  end;
  PLUTEST = ^LUTEST;var
  ini: TIniFile;
  st: LUTEST;
  pst: PLUTEST;procedure c(var a: PLUTEST);
begin
  Writeln(a^.abc);
  Writeln(a^.ccc);  Dispose(a);
  a := nil;
end;begin
  New(pst);
  pst.abc := 100;
  pst.ccc := 11.001;
  pst^.abc := 1001;
  pst^.ccc := 111.001;  c(pst);  Dispose(pst);
  Readln;
end.上面是程序,不明白的就是,为何pst.abc可以用,而pst^.abc也一样可以用?
还有,把指针做为参数传入后,为何使用dispose后,这时,如果对pst的DEBUG还开着的话,pst里的内容并没有删掉?如何在过程中去释放pst才是正确的操作?
请不要把那两贴经典的DELPHI指针贴转过来,我看过了,没有我要的答案。谢谢!

解决方案 »

  1.   

    pst^相当于LUTEST
    所以可以使用
    pst^.abc
    至于释放就用Dispose(pst)即可
      

  2.   

    楼上,请问,那为何可以pst.abc呢?是不是因为object pascal在这方面不太严格?我记得C中是很明确的用->与.区分开的。还有关于那个指针释放的问题,我也觉的很奇怪。
    上面的程序,使用debug中的inspect看pst,pst^的话,就会为如下内容:
    pst: PLUTEST ebxpst^: LUTEST $EC1F94既使我在c过程中dispone了,但inspect框里的内容还不变。但,如果最后一段改成如下:
    begin
      New(pst);
      pst^.abc := 1001;
      pst^.ccc := 111.001;  Dispose(pst);
      Readln;
    end. 使用debug中的inspect看pst,pst^的话,在dispose之前,内容都保持,但调完disponse后,inspect框中就没有abc与ccc的内容了。不解,请再指教,谢谢!
      

  3.   

    第一:
    你就这么认为得了,C++中指针操作成员用"->",对象操作成员用"."
    在Delphi中统一都用".";
    第二:
    Dispose后只是告诉系统,该内存已经不再使用,并不代表一定要将其初始化(出于性能考虑吧)
      

  4.   

    ok,结贴吧,谢谢大家。有关于pst与pst^的更详细说明,大家有更好解释也可以分享一下给我吧,谢谢!