小心Delphi的对象,其实Delphi的对象全部是指针,例如我们最熟悉的Form,当我们调用
Form1.Edit1.Text时,其实Form1是指针,Edit1也是指针,只是大家可能没有注意罢了
也许有人会说,不对指针的调用应该是用Pointer^.Member,不错,是这样的,只不过
Form1和Edit1是Class,它是用指针实现,具有指针所有特性,但毕竟定义为Class,所以只能
用Form1.Edit1.Text来调用,而不能用Form1^.Edit^.Text,在这里还有一个有趣的现象,可
能大家没有注意,我们不可以用Edit1^.Text,但是如果我们定义
var pEdit: ^TEdit;
pEdit1 := @Edit1;
结果会怎样呢?如果我们要给Edit1.Text赋值'123',那么我们如何使用pEdit?
大家都会说,简单pEdit1^.Text := '123'就可以了,不错确实是这样,不过大家可以再试
一下,用pEdit1.Text := '123',看看会怎样,没想到吧,结果一样,这就是为什么说
对象就是指针的例子之一,在Delphi中,没有C++那样的对象变量,只要是对象,都用指针
实现。结构变量和结构指针的用法也有类似的地方,不过Record的变量,不是由指针来实
现的,所以大家用Move函数特别小心,比方说
var pSource,pDest
Char;
len: integer;
.......................//一些代码
Move(pSource,pDest,len)
//错误
Move(pSource^,pDest^,len)
//正确
小心呀,要不然,你死了都不知道在那里死的