Einzelnen Beitrag anzeigen

Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#1

Nochmal zu Arrays als Parameter

  Alt 29. Nov 2011, 07:23
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
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat