2016-04-28 77 views
-3
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的长度时,它不会给我提供任何错误或任何内容。Delphi使用由静态数组定义的2d数组

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

任何想法为什么?

我需要数组来定义这种方式,但我坚持如何设置它的长度。

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

* Edit2修复了一些代码。

* EDIT3取得了较好的例子

+1

StaticArray具有1001个元素,而不是1000,FWIW。是的,2DArray是2D,1001 *长度。你没有显示足够的代码来诊断你的问题。我们需要一个[mcve]。 –

+0

在德尔福柏林工作正常,除了David提到的额外元素。执行长度为(MyArray)和长度(MyArray [10])的WriteLn的10行控制台应用程序显示它们都存在并具有适当的值。 –

+0

为什么不先发布真实代码?以上不编译。 'Length'没有在任何地方声明或分配,并且'StaticArray'的声明也是错误的。 –

回答

1

我检查你的代码,故意留下相同的id Length。代码按预期工作:

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; 
+0

谢谢MBo花时间研究这一点。代码看起来很好。 我认为这是我的调试器检查器,给了我数组大小的错误指示。 看到这个[图片](https://i.imgur.com/fvyxlCl.png)。当我将鼠标悬停在上面时,它会正确显示5行。 – Monin

+0

请注意,您的“完整且可验证的示例”可以帮助您快速解决问题。并且请避免使用'Length'标识符 - 这是非常重要的内部函数(但不幸的是它的名字不保留)。 – MBo

+0

虽然Length隐藏了Length()函数,但您仍然可以通过System.Length()访问后者。 –