如何解决Delphi Records-创建指向它的指针
我试图查看如何创建指向简单记录的指针。
我创建的A和B是实际记录。
然后,我有一个变量C,我希望它只是“指向该记录的指针”。
我不希望C存储自己的值,而只是存储指向A或B的指针。
但是每当读/写C时,
它实际上是写到A或B,无论C指向哪个。
换句话说,它就像一个指向对象的指针,但是在我的情况下我不需要对象。
使用Delphi 10.3和10.4(如有区别),请突出显示。
procedure TForm1.Button2Click(Sender: TObject);
type
TMyRecord = record
Field1 : integer;
end;
var
A : TMyRecord;
B : TMyRecord;
C : ^TMyRecord; // how to declare this as a pointer?
begin
A.Field1 := 1;
B.Field1 := 2;
C^ := A; // psuedo code to point to A
A.Field1 := 3;
showmessage( C^.Field1.ToString ); // result is 3
C.Field1 := 4;
showmessage( A.Field1.ToString ); // result is 4
C^ := B; // psuedo code to point to A
C.Field1 := 5;
showmessage( B.Field1.ToString ); // result is 5
// anything to free here to avoid memory loss?
end;
解决方法
C
应该包含A
的地址,因此make
C := @A;
,其余代码将根据需要运行。
还请注意,C.Field1
是隐式取消引用,它实际上像C^.Field1
现在
C^ := A;
表示将A
记录的内容分配给C
寻址的存储区,但是未分配此存储区-这就是发生访问冲突的原因。 (要分配内存,您可以创建New(C)
,但这不是您所需要的)
此外,如果您要主动使用指针进行记录,则可以定义类型
PMyRecord = ^TMyRecord;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。