數組Array of Double 和 數組類型TDoubleDynArray是不同的。數組是值類型,數組類型是引用類型。如果參數傳遞數組,可以傳遞數組類型也可以傳遞const參數,可避免數組的拷貝。如下面測試代碼。
數組類型A賦值數組類型B,A和B指向的數組地址相同,但A和B的指針不同。對數組的值的更改會反映到A和B上。但如果重新設置數組的長度,會導致重新分配內存,這時A和B就指向不同的地址空間,A和B的更改就不會影響到對方。
unit Unit5; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Types, Dialogs, StdCtrls, ExtCtrls, RzPanel; type TForm5 = class(TForm) btn1: TButton; edt1: TEdit; btn2: TButton; edt2: TEdit; procedure btn1Click(Sender: TObject); procedure btn2Click(Sender: TObject); private procedure ChangeArray(AArray: array of Double); procedure ChangeArrayType(AArrayType: TDoubleDynArray); public { Public declarations } end; var Form5: TForm5; implementation {$R *.dfm} { TForm5 } procedure TForm5.btn1Click(Sender: TObject); var LArray: array of Double; begin SetLength(LArray, 10); ZeroMemory(@LArray[0], 10 * 8); edt1.Text := FloatToStr(LArray[0]); //輸出0 ChangeArray(LArray); edt2.Text := FloatToStr(LArray[0]); //輸出0 end; procedure TForm5.btn2Click(Sender: TObject); var LArray: TDoubleDynArray; begin SetLength(LArray, 10); ZeroMemory(@LArray[0], 10 * 8); edt1.Text := FloatToStr(LArray[0]); //輸出0 ChangeArrayType(LArray); edt2.Text := FloatToStr(LArray[0]); //輸出99 end; procedure TForm5.ChangeArray(AArray: array of Double); begin AArray[0] := 99; end; procedure TForm5.ChangeArrayType(AArrayType: TDoubleDynArray); begin AArrayType[0] := 99; end; end.