创建同一类对象,用一个变量去引用,为什么不分配新的内存空间给对象 ( 积分: 100 )

  • 主题发起人 主题发起人 xuegaoyili
  • 开始时间 开始时间
X

xuegaoyili

Unregistered / Unconfirmed
GUEST, unregistred user!
PShu=^TShu
//二叉树结构定义
TShu=class
public
Data:integer;
prv,next:PShu;
end;

//=============================================================
//这里是建树
var
tmpShu:TShu;
begin
tmpShu:=TShu.Create
//这里是创建一新对象
tmpshu.Data:=1;
Shu:=@tmpshu;

tmpshu:=TShu.Create
//这里又创建一新对象,为什么指向的内存地址和第一个一样
tmpshu.Data:=2;
Shu.prv:=@tmpShu;

tmpshu:=TShu.Create
//这里创建新对象不会分配新的内存空间吗
tmpshu.Data:=3;
Shu.next:=@tmpShu;

tmpshu:=TShu.Create;
tmpshu.Data:=4;
Shu.prv.prv:=@tmpShu;

tmpshu:=TShu.Create;
tmpshu.Data:=5;
Shu.prv.next:=@tmpShu;
 
发现问题所在了.对于变量tmpshu来说,它的地址永远就是一个.

是它里面保存的对象的地址一直在变,所以我用root=@tmpshu总是得到tmpshu的那个
固定地址.

 
下面就想问问,如何快速初始化才好.

也就是解决一下,我该怎么改,才能不错的初始化出来这个树
 
TShu本来就是指针啊.PShu是指针的指针.
Shu.prv:=@tmpShu;是把tmpShu的地址付给Shu.prv.

TShu=class
public
Data:integer;
prv,next:TShu;
end;
就行了.Delphi VCL体系里面所有对象都是引用.可以理解成真正对象的指针.
 
delphi分基本数据类型和复杂数据类型
复杂数据类型传递的是指针
 
Shu:= tmpshu;
 
多人接受答案了。
 
后退
顶部