Manchmal nehme ich Dinge einfach als gegeben hin und mache mir keine Gedanken darüber. Grade bei so einfachen Sachen, die man Jahrelang verwendet.
Dann möchte ich aber doch wissen, ob das Ergebnis Zufall ist, oder ob es ein definierter Zustand ist.
Ich kann es nicht in der Embarcadero-Doku finden, deshalb brauche ich mal euren Input.
Gegeben ist ein zweidimensionales Array von einem einfachen Record. Das Array wird mit Setlength auf die gewünschte Größe gebracht.
Ist der Inhalt nun definiert, oder Zufall? (Bisher habe ich so ein Array immer initialisiert und mir keine Gedanken gemacht). Im Beispielprogramm sieht es so aus, als wenn die Inhalte des Records (Integer-Werte) einen definierten Zustand haben (0). Zufall oder nicht? Ich finde in der Doku keine Definition.
Dann belege ich die Records mit Werten.
Danach verkleinere ich das Array mit SetLength. Die bestehenden Zellen behalten ihre definierte Werte. Was auch gewünscht ist. Aber.... Zufall oder nicht? Ich finde in der Doku keine Definition.
Danach vergrößere ich das Array mit SetLength. Die bestehenden Zellen behalten ihre definierte Werte. Und die neuen Zellen bekommen wieder einen definierten Wert (Keine Zufallszahl). Aber.... Zufall oder nicht? Ich finde in der Doku keine Definition.
Kennt einer eine Stelle in der Delphi-Dokumentation, in dem beschrieben wird, wie sich die Werte eines Array nach Änderung der Größe mit SetLength verhalten? Gibt es Unterschiede bei den Datentypen? (Integer, double, String, etc.)
Wie gesagt: Eine triviale Frage. Aber es interessiert mich.
Hier das Beispielprogramm:
Delphi-Quellcode:
program ccConsoleTest;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.Types,
System.SysUtils,
System.math;
Type
TestRecord = record
x: Integer;
y: Integer;
function asText: String;
end;
TTestRecordArray = array of array of TestRecord;
Procedure writelnTestArray(aTestRecordArray: TTestRecordArray);
var
lx: Integer;
ly: Integer;
stri: string;
begin
for ly := 0 to length(aTestRecordArray[0]) - 1 do
begin
stri := '';
for lx := 0 to length(aTestRecordArray) - 1 do
stri := stri + aTestRecordArray[lx,ly].asText + ' ';
writeln(stri);
end;
writeln('---------');
end;
function TestRecord.asText: String;
begin
Result := inttostr(x) + '/' + inttostr(y);
end;
var
lx: Integer;
ly: Integer;
lTestRecordArray: TTestRecordArray;
begin
setlength(lTestRecordArray, 5, 5);
// Zufallswerte oder nicht
writelnTestArray(lTestRecordArray);
// Belegen der Zellen
for lx := 0 to 4 do
for ly := 0 to 4 do
begin
lTestRecordArray[lx,ly].x := lx;
lTestRecordArray[lx,ly].y := ly;
end;
writelnTestArray(lTestRecordArray);
// Array verkleinern
setlength(lTestRecordArray, 3, 3);
writelnTestArray(lTestRecordArray);
// Array vergrößern
setlength(lTestRecordArray, 5, 5);
writelnTestArray(lTestRecordArray);
// Ende
readln;
end.
Hier der Output:
Code:
0/0 0/0 0/0 0/0 0/0
0/0 0/0 0/0 0/0 0/0
0/0 0/0 0/0 0/0 0/0
0/0 0/0 0/0 0/0 0/0
0/0 0/0 0/0 0/0 0/0
----------------
0/0 1/0 2/0 3/0 4/0
0/1 1/1 2/1 3/1 4/1
0/2 1/2 2/2 3/2 4/2
0/3 1/3 2/3 3/3 4/3
0/4 1/4 2/4 3/4 4/4
----------------
0/0 1/0 2/0
0/1 1/1 2/1
0/2 1/2 2/2
----------------
0/0 1/0 2/0 0/0 0/0
0/1 1/1 2/1 0/0 0/0
0/2 1/2 2/2 0/0 0/0
0/0 0/0 0/0 0/0 0/0
0/0 0/0 0/0 0/0 0/0