关于指针在线等 ( 积分: 100 )

  • 主题发起人 主题发起人 wsp_731
  • 开始时间 开始时间
W

wsp_731

Unregistered / Unconfirmed
GUEST, unregistred user!
p:^Tsheetitem;
begin
p:=@TSheetItem.Create;
showmessage(inttostr(p.InstanceSize));

为什么出错亚
 
p:^Tsheetitem;
begin
p:=@TSheetItem.Create;
showmessage(inttostr(p.InstanceSize));

为什么出错亚
 
我想用一个数组存储一批对象可以么?
 
用TObjectList存储吧
 
var
b: pointer;
begin
b := tButton.Create(nil);
showmessage(inttostr(TButton(b).InstanceSize));
TButton(b).Free;
end;
 
晕,不早说

var
L: TList;
P : TPerson;
begin
L:= TList.Create;
for I:= 0 to 99 do begin
P := TPerson.Create;
L.Add(P);
end;


释放的时候

for I:= 0 to L.count -1 do begin
TPerson(L.Items(I)).Free;
end;
L.Free;
 
colonel
怎样用objectlist存储呀,能有例子发给我么
 
用tList是一样的,就拿我的代码用就行了,记得释放就行了
 
就是,这种情况一般用Tlist来管理的。
 
[:D][:D]哎呀自己写个链表类存贮不就可以了吗!
搂住要源代码留个e-mail!我发给你!
 
wsp_731@163.com 先谢谢了
 
记得有Sort里面有个TStringListSortCompare,就是比较规则,你传进去了就可以实现快速排序,再自己写个二分查找,TList效率就快多了。
 
已经发出邮件了![:D]希望能帮你!那里面有几个地方就用到了指针,你自己慢慢看,我自己写的程序代码。
 
没有收到呀,能shaopeng1975@163.com,这个邮箱在发一个看看吧
 
我为什么申请一块内存,然后把对象复制进去就是得不到一个对象的复制版呢,大小什么的都注意了,就是出错误,delphi是怎么申请空间,把对象生成的
 
你的代码:
(var)
p:^Tsheetitem;
begin
p:=@TSheetItem.Create;
showmessage(inttostr(p.InstanceSize));
end;
这里TSheetItem是你自定义的一个类吧?
Delphi的申请空间是这样的(拿上面代码来说):
当你var P:TSheetItem;时,编译器为你分配一个指向TSheetItem类对象的指针(P),但没有
创建对象(即分配堆中对象占用的空间),要编程人员手工创建对象(即调用Create构造
函数创建);
TSheetItem.Create;就是在堆中分配对象空间(即手工创建对象);
然后P :=TSheetItemCreate;就是将创建的对象(空间)的指针(地址)赋给 P;
所以实际上你所用的 P 只是一个对象(指针)引用,通过操作指针引用操作对象。
因此,正确代码应是:
var
p:Tsheetitem

begin
p:=TSheetItem.Create;
showmessage(inttostr(p.InstanceSize));
end;
 
Jonson_sunshine
你好,嗬嗬,很想认识你,我的qq是41979259,可以加我么
 
p:^Tsheetitem;

New(p);
p^:=TSheetItem.Create;
 
Jonson_sunshine
非常感谢你的参与,嗬嗬,听君一席话,胜读十年书呀,你对delphi的理解令俺敬佩,呵呵
俺用了一个动态数组就解决了,再次感谢![:D]
 
做容器
参见Classes单元下的
TList
TCollection
 

Similar threads

回复
0
查看
863
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部