以下是在delphi中使用指针的简单示例.
Type TRecord1 = Record field1 : String; end; procedure TForm1.Button2Click(Sender: TObject); var Rec : TRecord1; Ptr: ^TRecord1; begin Rec.field1:= 'field1'; Ptr := @Rec; memo1.Lines.Add (Ptr^.field1); memo1.Lines.Add (Ptr.field1); // it also works. end;
在这种情况下,Ptr ^和Ptr都可以工作.看来,delphi是允许用户更多地指向价值的灵活性.但是通过阅读这两行,它们在语法上是不同的,可能意味着不同.在这种情况下,两个工作.但我的问题是:
>在其他情况下,用户可以知道哪些可以或不可以
省略或用^或不表示相同或不同?
>这些情况是什么?例子将不胜感激
>为什么? (可选的)
非常感谢.
解决方法
how can a user know in other situations where ^ can or can not be omitted or,where with ^ or without ^ means the same or differently?
What are those situations ? Examples will be appreciated.
一个普通的指针没有任何字段或属性,所以忽略了Delphi的智能,Pointer.Field语法没有意义.因为指针^ .Field和Pointer.Field之间不能有冲突,只是因为平原.如果您不重新引用指针,语法是无意义的.
如果指针指向的类型没有任何字段,则必须使用^语法.也就是说,当指针是指向基本类型的指针时,或者是一个无类型的指针.
Why? (Optional)
类实例引用(大多数人称之为“对象”)也是Delphi中的指针,我假定引入了语法,使得使用指针不太冗长,更像使用类.它也是无害的,因为如上所述,编译器不能弄错.
我个人更喜欢^.语法,因为它清楚地表明我正在使用一个指针,而不是一个记录或类.