System.Types
单元声明了一个数组类型:
TDoubleDynArray = array of Double;
如果我将一个方法声明为:
procedure func (x : TDoubleDynArray)
我注意到参数
x
的行为类似于var
参数,也就是说,我可以在方法内部更改x
,并且我会看到方法外部反映出这些变化。然而,当我使用
procedure func (x : array of double)
正如预期的那样,对
x
的任何更改都会保留在func
中。虽然TDoubleDynArray
似乎被声明为double的数组
,但它的行为与我自己的double的数组
不同。这是什么原因呢?更新:我注意到如果我声明自己的类型
TMyArray = array of double
,那么我将得到与TDynamicDynArray
相同的行为。这是否与基本数组类型之间的差异有关?测试代码如下
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses System.Types;
var
x : TDoubleDynArray;
y : array of double;
procedure func1 (x : TDoubleDynArray);
begin
x[0] := -999.123;
end;
procedure func2 (y : array of double);
begin
y[0] := -999.123;
end;
begin
setLength (x, 10);
func1 (x);
writeln ('TDoubleDynArray: ', x[0]);
setLength (y, 10);
y[0] := 0;
func2 (y);
writeln ('array of double: ', y[0]);
Readln;
end.
TMyArray
是一个动态数组。 - David HeffernanX的数组
将创建一个“开放数组”。而任何其他使用X的数组
的情况都会创建一个动态数组。 - Remy Lebeau