2016-04-28 41 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()訪問後者。 –