Leider wurde der
Originalthread bereits geschlossen, so dass ich hier noch einmal Stellung beziehen möchte. Arrays werden definitiv
nicht automatisch By Reference übergeben, im Gegensatz zu Objektinstanzen (welche ja intern eigentlich Pointer sind). Kleines Testprogramm:
Delphi-Quellcode:
type
TTestArray =
array[0..1]
of string;
//2 Routinen mit offenen Array-Parametern
procedure ChangeArray1(Arr:
array of string);
begin
if Length(Arr) > 0
then
Arr[0] := '
Wuppdi';
end;
procedure ChangeArray2(
var Arr:
array of string);
begin
if Length(Arr) > 0
then
Arr[0] := '
Wuppdi';
end;
//Und 2 Routinen mit typisierten Array-Parametern
procedure ChangeArray3(Arr: TTestArray);
begin
Arr[0] := '
Wuppdi';
end;
procedure ChangeArray4(
var Arr: TTestArray);
begin
Arr[0] := '
Wuppdi';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
TestArr:
array[0..1]
of string;
TestArr2: TTestArray;
begin
TestArr[0] := '
Dideldum';
TestArr2[0] := '
Dideldum';
ShowMessage('
Original TestArr: ' + TestArr[0]);
ChangeArray1(TestArr);
ShowMessage('
Nach Call By Value: ' + TestArr[0]);
ChangeArray2(TestArr);
ShowMessage('
Nach Call By Reference: ' + TestArr[0]);
//nun das typisierte Array
ShowMessage('
Original TestArr2: ' + TestArr2[0]);
ChangeArray1(TestArr2);
ShowMessage('
Nach Call By Value: ' + TestArr2[0]);
ChangeArray2(TestArr2);
ShowMessage('
Nach Call By Reference: ' + TestArr2[0]);
end;
Sry für den neuen Thread, aber ich wollte das einfach klargestellt haben