Code: Alles auswählen
program cTestArray;
{$mode objfpc}{$H+}
uses
{$IFDEF LINUX}
cthreads,
{$ENDIF}
Sysutils, Classes;
Type
TDataRec = Record
sName : AnsiString;
nNum : Longint;
nIdx : Longint;
end;
Var
raData : Array[1..4] of TDataRec;
Procedure xSetArrayA(var arA : Array of TDataRec);
begin
WriteLn('xSetArrayA High : ' + IntToStr(High(arA)));
arA[1].sName:= 'VA1';
arA[1].nIdx:=1;
arA[1].nNum:=100;
arA[2].sName:= 'VB2';
arA[2].nIdx:=2;
arA[2].nNum:=200;
arA[3].sName:= 'VC3';
arA[3].nIdx:=3;
arA[3].nNum:=300;
arA[4].sName:= 'VD4';
arA[4].nIdx:=4;
arA[4].nNum:=400;
end;
Procedure xSetArrayB;
begin
WriteLn('xSetArrayB High : ' + IntToStr(High(raData)));
raData[1].sName:= 'SA1';
raData[1].nIdx:=1;
raData[1].nNum:=100;
raData[2].sName:= 'SB2';
raData[2].nIdx:=2;
raData[2].nNum:=200;
raData[3].sName:= 'SC3';
raData[3].nIdx:=3;
raData[3].nNum:=300;
raData[4].sName:= 'SD4';
raData[4].nIdx:=4;
raData[4].nNum:=400;
end;
Procedure xReadArray(N : Longint);
begin
For N:=1 to N do begin
WriteLn(Format('<%d> %s %d %d', [N,
raData[N].sName,
raData[N].nNum,
raData[N].nIdx]));
End;
end;
Procedure xRun;
begin
xSetArrayA(raData);
xReadArray(5);
WriteLn('--------------');
xSetArrayB;
xReadArray(5);
end;
begin
xRun;
end.
Bei der ersten Procedure xSetArrayA wird das Array als Var übergeben und beschrieben.
Bei der zweiten Procedure xSetArrayB wird das Array direkt beschrieben.
Ausgabe mit Procedure xReadArray.
Ausgabe :
xSetArrayA High : 3
<1> 0 0
<2> VA1 100 1
<3> VB2 200 2
<4> VC3 300 3
<5> VD4 400 4
--------------
xSetArrayB High : 4
<1> SA1 100 1
<2> SB2 200 2
<3> SC3 300 3
<4> SD4 400 4
<5> VD4 400 4
Frage :
Warum ist der 1. Index des Arrays bei var übergabe 0 und bei direktem Zugrif 1 ?
Wiso hat das Array bei 'xSetArrayA 3 Indexe und bei 'xSetArrayB 4 Indexe.
Bei der Ausgabe 5 Index obwohl das Array nur 4 Indexe hat !
Bei der Ausgaben Schleife mit 4 fehlt bei xSetArrayA der letzte Eintag.
Bei der Ausgaben Schleife mit 4 fehlt bei xSetArrayB alles OK.
Bei der Ausgaben Schleife mit 5 fehlt bei xSetArrayB müsste es eine Fehler geben da
das Array nur eine grösse von 1..4 hat aber es hat 5 durch xSetArrayA.
Ich verstehe es nicht.
Grüße Acia6850