2

現在、次のような Delphi の手順があります。

Procedure Time.TimeDB(algorithm: string; Encode, Decode: InputFunction; N, R: Int);
VAR
    i : LongInt;
    Errors : Array[N] of LongInt;
BEGIN

for i := 0 to N-1 do
  Errors[i] := 0;

END;

Errors の定義に渡される N は、プロシージャ定義で宣言されているにもかかわらず、宣言されていない識別子であるというエラーが表示されます。ただし、BEGIN-END セクションでは N が認識されます。これの原因と、VAR セクションで可変長配列を宣言する方法を教えてください。

4

2 に答える 2

11

s の動的配列array of Int宣言するには、次のように記述します。Int

procedure Time.TimeDB(algorithm: string; Encode, Decode: InputFunction; N, R: Int);
var
  i: int;
  errors: array of Int;
begin

  SetLength(errors, N);
  for i := 0 to N - 1 do
    Errors[i] := 0;

end;

また、配列にN要素がある場合は0、 、1、 ...、というインデックスが付けられることにも注意してN - 1ください。indexed 要素はありませんN

integer(また、あなたが書くとき、あなたは本当に意味がありませんIntか?)


この構造array[M..N] of Int静的配列と呼ばれます。この場合、Mとはのような定数Nでなければなりません。またはのように、インデックスが型になる静的配列宣言も取得しました。array[0..15] of TColorarray[TMyType] of TMySecondTypeTMyTypearray[byte] of TColorarray[TFontStyle] of cardinal

于 2013-08-09T15:25:14.780 に答える
1

コードでは、エラー配列をゼロに初期化しています... SetLength を使用すると、これを行う必要がないことに注意してください...配列を0に設定してから、必要な長さに設定してから、値を割り当てるだけです必要。

procedure WorkArrays(var aWorking: array of integer);
begin
  if High(aWorking) >= 0 then
    aWorking[0] := 1;
  if High(aWorking) >= 3 then
    aWorking[3] := 5;
end;

procedure WorkArrays2(var aWorking: array of integer);
begin
  if High(aWorking) >= 1 then
    aWorking[1] := 4;
  if High(aWorking) >= 9 then
    aWorking[9] := 7;
end;

procedure WorkArrays3(var aWorking: TIntArray);
begin
  SetLength(aWorking, 4);
  aWorking[0] := 1;
  aWorking[3] := 5;
end;

procedure WorkArrays4(var aWorking: TIntArray);
begin
  SetLength(aWorking, 10);
  aWorking[1] := 4;
  aWorking[9] := 7;
end;

procedure TForm58.ShowArrays(aWorking: array of integer);
var
  a_Index: integer;
begin
  for a_Index := Low(aWorking) to High(aWorking) do
    Memo1.Lines.Add(IntToStr(aWorking[a_Index]));
end;

procedure TForm58.ShowArrays2(aWorking: TIntArray);
var
  a_Index: integer;
begin
  for a_Index := Low(aWorking) to High(aWorking) do
    Memo1.Lines.Add(IntToStr(aWorking[a_Index]));
end;

procedure TForm58.Button1Click(Sender: TObject);
var
  a_MyArray: array of integer;
  a_MyArray1: TIntArray;
begin
  SetLength(a_MyArray, 3);//note this is a Zero based Array...0 to 2
  WorkArrays(a_MyArray);//note aWorking[3] will not show...because High is 2...
  ShowArrays(a_MyArray);
  SetLength(a_MyArray, 0);
  SetLength(a_MyArray, 10);//note this is a Zero based Array...0 to 9
  WorkArrays2(a_MyArray);
  ShowArrays(a_MyArray);
  WorkArrays3(a_MyArray1);
  ShowArrays2(a_MyArray1);
  WorkArrays4(a_MyArray1);
  ShowArrays2(a_MyArray1);
end;

終わり。

于 2013-08-09T20:21:26.033 に答える