gpt4 book ai didi

delphi指针问题

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

我有以下代码,可以运行,但我不能 100% 理解它(请参阅代码中的注释):

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TMyRec=record
a:Integer;
b:String;
end;
TRecArray=array of TMyRec;
PRecArray = ^TRecArray;

TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
v1:TRecArray;
procedure Test(a:PRecArray);
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
SetLength(v1,3);
v1[0].b:='test1';//set the first value
Test(PRecArray(v1));//call method to change the value assigned before
end;

procedure TForm1.Test(a: PRecArray);
begin
ShowMessage(v1[0].b);//shows test1
try
a^[0].b:='test2' //this is raising an error...
except

end;
PRecArray(@a)^[0].b:='test3';//this is working...
ShowMessage(v1[0].b);//shows test3
end;

end.

我不明白为什么 'a^[0].b:='test2' 会引发错误。

谢谢!

最佳答案

您的“测试”过程需要一个“PRecArray”,但您正在向它传递一个“TRecArray”。尝试这样调用它

 Test(@v1);//call method to change the value assigned before

将“TRecArray”类型转换为“PRecArray”不会使其成为“PRecArray”。 (注意:你的“test3”当然会失败。)

关于delphi指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7119659/

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