Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Nochmal zu Arrays als Parameter (https://www.delphipraxis.net/164763-nochmal-zu-arrays-als-parameter.html)

DeddyH 29. Nov 2011 07:23

Nochmal zu Arrays als Parameter
 
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 ;)

Bummi 29. Nov 2011 07:30

AW: Nochmal zu Arrays als Parameter
 
@DeddyH
dafür hatte ich ja den Spielcode, mit der Aufforderung solange zu probieren bis nichts mehr geht, eingestellt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz