gpt4 book ai didi

delphi - 是否使用^指向值有什么规则?

转载 作者:行者123 更新时间:2023-12-03 14:41:36 25 4
gpt4 key购买 nike

下面是在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是为了让用户更灵活地指向值。但只要读一下这两行,就会发现它们在语法上是不同的,而且可能意味着不同的意思。在这种情况下,两者都有效。但我的问题是:

  1. 用户如何知道在其他情况下 ^ 可以或不可以省略或,其中带^或不带^表示相同或不同?
  2. 那些情况是什么?我们将不胜感激。
  3. 为什么? (可选)

提前非常感谢。

最佳答案

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.

普通的Pointer没有任何字段或属性,因此忽略Delphi的智能,Pointer.Field语法没有意义。因此,Pointer^.FieldPointer.Field 之间不会发生冲突,因为简单的 . 语法在以下情况下毫无意义:您不会取消引用指针。

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

Why? (Optional)

类实例引用(大多数人称之为“对象”)也是 Delphi 中的指针,我认为引入语法是为了使指针的使用不那么冗长,更像使用类。它也是无害的,因为如上所述,编译器不会出错。

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

关于delphi - 是否使用^指向值有什么规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6673690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com