我有以下代码,它是可行的,但我并不完全理解它(请看代码中的注释):
我不明白为什么"a^[0].b:='test2'"会引起一个错误。
谢谢!
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'"会引起一个错误。
谢谢!
PArrayRec = ^TArrayRec
命名为TPointerArryRec
,而不是。我个人会称它们为TRecArray
和PRecArray
,即以Array结尾。我看到@iamjoosy几乎在同一时间有同样的想法。 - Rudy Velthuis