Autor Beitrag
buSC
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Di 09.02.10 12:07 
Hallo
ich habe ein Procedure wie folgend:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Procedure Pro(arr:array of double);
var...
begin
quicksort(arr); //hier wird arr sortiert
verbrauch von sortierte "arr" ;
end;

das Problem ist ,wenn der "Pro"-Aufruf schon fertig ist, ist die Array "arr" sortiert,wobei ich erwarte,dass die Array "arr" unsortiert bleibt,angesicht dessen ,dass der Argumant von "Pro" ein "value"-Argumant ist und kein "var"-Argumant ist.
warum passiert so ..? vielen Dank im Voraus.
:)

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Titel korrigiert.
martin300
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: Di 09.02.10 13:13 
Hallo,
es war sehr schwierig den Inhalt zu verstehen. Dazu steht in der Hilfe folgendes:

Da in Delphi keine Wertesemantik für dynamische Arrays implementiert ist, stellen "Wert"-Parameter in Routinen keine vollständige Kopie des dynamischen Arrays dar. Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
 type
  TDynamicArray = array of Integer;
  procedure p(Value: TDynamicArray);
  begin
    Value[0] := 1;
  end;
 
  procedure Run;
var
    a: TDynamicArray;
begin
  SetLength(a, 1);
  a[0] := 0;
  p(a);
  Writeln(a[0]); // Gibt '1' aus
end;

Beachten Sie, dass die Zuweisung zu Value[0] in Routine p den Inhalt des dynamischen Arrays der aufrufenden Routine ändert, obwohl Value ein Wertparameter ist. Falls eine vollständige Kopie des dynamischen Arrays erforderlich ist, verwenden Sie die Standardprozedur Array.Copy, um eine Wertekopie des dynamischen Arrays zu erstellen.