关于指针的疑惑,请大侠指教!(50分)

  • 主题发起人 主题发起人 EdwinYeah
  • 开始时间 开始时间
E

EdwinYeah

Unregistered / Unconfirmed
GUEST, unregistred user!
var
ds: TDataSet;
dsp: ^TDataSet;
begin
//创建ds,略
dsp := @ds;

dsp.Open//这句和下面这句有什么异同?
dsp^.Open

end;
 
dsp.Open :是调用该指针一个open方法;
dsp^.Open :是引用该指针的一个为open的值:
 
不同意楼上的, 对于对象类型变量来说实际就是一个指针. 所以说他们是相同的.
看一段代码:
procedure TForm1.Button2Click(Sender: TObject);
var
p : ^TTable;
begin
p := @Table1;
p^.Open;
p.Open;
end;

004ADE70 53 push ebx
* Reference to control TForm1.Table1 : TTable
004ADE71 8D98FC020000 lea ebx, [eax+$02FC]
004ADE77 8B03 mov eax, [ebx]

* Reference to: db.TDataSet.Open(TDataSet);
004ADE79 E8DA93FCFF call 00477258
004ADE7E 8B03 mov eax, [ebx]

* Reference to: db.TDataSet.Open(TDataSet);
004ADE80 E8D393FCFF call 00477258
004ADE85 5B pop ebx
004ADE86 C3 ret

 
dsp.Open跟dsp^.Open是等效的! 只是DELPHI允许你以第一种写法而已
建议使用第二种写法,因为一看就知道dsp是一个指针。

 
同意楼上的
 
并未学过pascal,只学过C.谢谢大家了!
 
[:)][8D][:D][^][8D][:)][:(][:(!]
 
多人接受答案了。
 

Similar threads

C
回复
9
查看
220
chuQingSheng
C
N
回复
4
查看
170
netxray
N
P
回复
2
查看
107
wr960204
W
回复
9
查看
263
秋之叶
后退
顶部