Delphi 是否使用^指向值的规则是什么?

Delphi 是否使用^指向值的规则是什么?,delphi,Delphi,下面是一个在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); m

下面是一个在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似乎是为了让用户更灵活地指向值。但是仅仅通过阅读这两行文字,它们在语法上是不同的,并且可能意味着不同。在这种情况下,两者都起作用。但我的问题是:

  • 在其他情况下,用户如何知道^ 省略或,其中带^或不带^表示相同或不同
  • 这些情况是什么?请举例说明
  • 为什么??(可选)

  • 非常感谢。

    ptr.property永远都是无效的,并且与ptr^.property截然不同,因此Delphi允许您省略^。如果未键入ptr(或是基本数据类型),则始终需要^

    在其他情况下,用户如何知道^可以省略或不可以省略,或者带^或不带^表示相同或不同

    这些情况是什么?请举例说明

    普通的
    指针
    没有任何字段或属性,因此忽略Delphi的smarts,
    指针.Field
    语法没有意义。因此,
    Pointer^.Field
    Pointer.Field
    之间不会有冲突,因为如果不取消对指针的引用,简单的
    语法是没有意义的

    如果指针指向的类型没有任何字段,则必须使用
    ^
    语法。也就是说,当指针是指向基本类型的指针或非类型指针时

    为什么??(可选)

    类实例引用(大多数人会称之为“对象”)也是Delphi中的指针,我假设引入这种语法是为了减少使用指针的繁琐,更像是使用类。它也是无害的,因为如上所述,编译器不会出错


    我个人更喜欢
    ^.
    语法,因为它清楚地表明我使用的是指针,而不是记录或类。

    它非常简单。如果ptr.field的使用是明确的,即如果它不能有ptr^.field以外的任何其他含义,则可以省略^


    但只有到那时。如果省略“^”会产生一个不明确的结构(即它可能具有不同的含义),则不能省略它。

    唯一的区别是

    Ptr1 := Ptr2 
    
    不等于

    Ptr1^ := Ptr2^
    
    第一行将使Ptr1和Ptr2指向同一内存区域,第二行将Ptr2指向的值分配给Ptr1指向的“变量”


    出于这个原因,我认为允许Ptr.Field值语法应该是一个错误,因为即使编译器端不会产生歧义,它也会引入一种惰性的代码编写方式,在上述情况下可能会适得其反。

    “类也是Delphi中的指针”-这不应该是“对象引用也是Delphi中的指针”吗?@mjn最好是“类实例也是Delphi中的指针”,因为“对象引用”可以引用
    Object
    关键字,不是吗?不管怎样,我们都明白了重点@A.Bouchez,因为对象是值类型的对象引用,所以只能表示这一类型。我个人更喜欢在讨论中使用object来表示类的实例。这就不那么冗长了。“类实例也是Delphi中的指针”听起来也不正确:)+1“我个人更喜欢^.语法,因为它让我明白了….”我也是。当
    ptr
    是指针类型(包括隐式指针)时,可以省略解引用。ptr.property是有效的语法,即使ptr^.property更正确。@A.Bouchez:我想你误解了这里的答案。他与科斯明的观点相同,他说,
    ptr.property
    永远不会有意义,因此德尔福不会做错任何事(+1以弥补否决票)@Smasher,@A.Bouchez,我还认为高迪回答的措辞确实令人困惑:如果你理解根本问题,你可能会猜出其含义,但除此之外,答案是误导性的。A.Bouchez是完全正确的,
    ptr.property
    是有效的语法,没有进一步的解释,一半的答案是不正确的。