很神奇如下:
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指针贴转过来,我看过了,没有我要的答案。谢谢!
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指针贴转过来,我看过了,没有我要的答案。谢谢!
所以可以使用
pst^.abc
至于释放就用Dispose(pst)即可
上面的程序,使用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的内容了。不解,请再指教,谢谢!
你就这么认为得了,C++中指针操作成员用"->",对象操作成员用"."
在Delphi中统一都用".";
第二:
Dispose后只是告诉系统,该内存已经不再使用,并不代表一定要将其初始化(出于性能考虑吧)