Home » Tipps & Tricks » Object Pascal » Arrays » Dynamische Arrays

Dynamische Arrays

Um mal kurz etwas zu den Begriffen zu sagen. Ein statisches Array ist ein Array, das seine Größe behält. Ein dynamisches Array ist ein Array, das seine Größe ändert. In der Regel werden Arrays mit einer festen Größe (also statische Arrays) benutzt. Diese können nun statisch angelegt sein:

type
  PMyArray = ^TMyArray;
  TMyArray = array[1..100] of Byte;

var
  a : TMyArray;
begin
  a[50]:=10;
end;

oder dynamisch erzeugt werden:

var
  a : PMyArray;
begin
  GetMem(a, 100*SizeOf(Byte));
  try
    a^[50]:=10;
  finally
    FreeMem(a, 100*SizeOf(Byte));
  end;
end;

Die sogenannten dynamischen Arrays funktionieren in etwa so wie das zweite Beispiel, nur kümmert sich der Compiler um den Speicher.Weiterer Vorteil, der Compiler kopiert das Array automatisch um, wennsich die Größe ändert.Je nach Anwendungsfall kann die TList eine sinnvolle Alternativedarstellen.Seit ein paar Delphi Versionen gibt es dynamische Arrays von Haus aus. Bevor man mit ihnen Arbeiten kann muss man die Größe festlegen. Dies macht man mit SetLength. In Schleifen kann der höchste und niedrigste Wert des Arrays mit Low() bzw High() ermittelt werden.

procedure TForm1.Button1Click(Sender: TObject);
var
  Feld: array of char;
  i: Integer;
begin
  SetLength(Feld, 100);
  for i:=Low(Feld) to High(Feld) do
   Feld[i]:='C';
end;

Dynamische Array stehen erst ab Delphi 4 zur Verfügung.Ein mehrdimensionales, dynamisches Array müßen sie wie folgt deklarieren:

var myarray: array of array of string;

Die Größe können sie dann mit setLength folgender Maßen anpassen:

setlength(myarray,3,6);

Mehrdimensionale, dynamische Arrays können auch ungleichmäßig sein:

var myarray: array of array of string;

setlength(myarray,3);    //Anzahl der Zeilen auf 5 setzen
setlength(myarray[0],2);  //Anzahl der Spalten für Zeile 1
setlength(myarray[1],7);  //Anzahl der Spalten für Zeile 2
setlength(myarray[2],5);  //Anzahl der Spalten für Zeile 3

Ein solches Array hätte folgenden Aufbau (Jedes O ist ein Element):

O O
O O O O O O O
O O O O O

Dynamische Arrays stehen erst ab Delphi 4 zur Verfügunung