Hi,
ich probiere grade offene Array-Parameter aus.
Dabei übergebe ich einer Routine ByValue ein dynamisches Array, einmal als direkte Variable , und dann als Typvariable.
Innerhalb der Routine manipuliere ich ein Arrayfeld.
Da es sich um dynamische Arrays und somit ja wohl um Zeiger handelt, wäre ich davon ausgegangen, dass in beiden Fällen das eingegebene Array verändert wird (trotz ByValue) und nicht nur das als Typvar übergebene.
Frage: Wo genau liegt der Unterschied?
Gilt das dann auch für andere Typvariablen, oder nur für Arrays?
Danke schon mal für Eure Hilfe,
Gruss: Daniel
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| type
TDynAr = array of integer;
TForm1 = class(TForm) ... procedure test1 (ar : array of integer); procedure test2 (ar : TDynAr); end;
procedure TForm1.test1 (ar: array of integer); begin ar [3] := 123; end;
procedure TForm1.test2 (ar: TDynAr); begin ar [3] := 123; end;
...
procedure TForm1.Button1Click (Sender: TObject); var a1 : array of integer; a2 : TDynAr; begin SetLength (a1, 4); a1 [3] := 0; test1 (a1); showmessage (inttostr (a1 [3])); SetLength (a2, 4); a2 [3] := 0; test2 (a2); showmessage (inttostr (a2 [3])); end; |