简单的指针问题(50分)

  • 主题发起人 主题发起人 保龙
  • 开始时间 开始时间

保龙

Unregistered / Unconfirmed
GUEST, unregistred user!
如下 P.b1:='aaa';
与 P^.b1:='aaa';
“它”俩有什么不同?[:D]
procedure TForm1.Button15Click(Sender: TObject);
type
pt=^bb;
bb=record
b1:string;
b2:integer;
end;
var
p:pt;
begin
New(p);
{ P^.b1:='aaa';
P^.b2:=888;
showmessage(p^.b1);
showmessage(inttostr(p^.b2));
//ͬÑù½á¹û
}
P.b1:='aaa';
P.b2:=888;
showmessage(p.b1);
showmessage(inttostr(p.b2));
end;
 
看一下pascal精要,讲得很清楚的,其实p.b1也是在引用指针
 
據說在傳統PASCAL中P.b1:='aaa'中不行的。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2222200
 
P.b1:='aaa';
与 P^.b1:='aaa';严格说来是不一样的在上面的例子中,P是一个指针类型的变量,它指向一个bt变量,而(p^)就是一个bt类型的变量,这可以用它们所占用的存储空间来看出来
sizeof(p) 此值为4,对于指针变量,始终为4(不同的系统可能不一样)
sizeof(p^) 此值为8,一个integer和一个string变量所占空间的和。
但在object pascal编译器中,变量P被看作对变量P^的一个引用(reference),在编译时编译器自动将变量P替换为对变量P^的操作,所以看起来结果就一样了。这个在C++中是很常见的。
 
上楼说的很清楚,哈哈!
 
同意windbell的说法。但是
>>而(p^)就是一个bt类型的变量。
应为(p^)是一个名称为bb的Record类型变量。
比砍我,哈哈
 
接受答案,并分配积分
 
后退
顶部