數組和數組類型的區別


數組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.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM