德尔福 使用由静态数组定义的二维数组


unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  StaticArray = Array[0..1000] of Double;
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  DArray: Array of StaticArray;
  Length : Integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
 Length:=5;
 Setlength(DArray, Length);
end;
end.

当我尝试使用 Setlength(( 来定义 2DArray 的长度时,它没有给我任何错误或什么都没有。

我希望结果是一个具有 1000 列和行长度的数组。但是,结果只有 1 行,有 1001 列。

知道为什么吗?

我需要以这种方式定义数组,但我无法设置它的长度。

*编辑列数,0..1000,加起来有1001列。

*编辑2修复了代码。

*编辑3做了一个更好的例子

我已经检查了您的代码,故意在Length留下相同的 id .代码按预期工作:

procedure TForm1.Button20Click(Sender: TObject);
type
  StaticArray = Array[0..1000] of Double;
var
  DArray: Array of StaticArray;
  Length : Integer;
begin
  Length := 5;
  SetLength(DArray, Length);
  Caption := IntToStr(High(DArray)); //ouputs 4
  //note bad usage of Length var, so we can not use Length intrinsic function
  DArray[3, 1000] := 42;
end;

最新更新