![]() |
Call by Value - wo ist mein Denkfehler?
Hallo zusammen ,
man kann ja Variablen "by value" - > proc( a : Integer; b: Real); oder "by reference" -> proc (var a: Integer; var b: Real); übergeben- und ich brauche den obigen Fall, dass ich also eine Variable an eine Prozedur übergebe, diese Variable dann innerhalb der Prozedur verändere, und sie aber ausserhalb der Prozedur unverändert bleibt:
Delphi-Quellcode:
Es geht hier um den Aufruf der Prozedur 'umgebungssuche' . Ich übergebe die Variable start_perm (vom Typ array of Integer);.... a := StrToInt(Edit1.Text); start_perm := zufallsperm(a); max_c := c_func(start_perm); l := length(start_perm); while (not local_max) do begin for um_a:=0 to (l-2) do begin for um_b:= um_a+1 to (l-1) do begin umgebungssuche(start_perm,um_a,um_b); end; end; .... diese wird dann innerhalb von 'umgebungssuche' verändert. Ich möchte nun, dass im nächsten Durchlauf erneut die ursprüng- liche start_perm genommen wird, jedoch sehe ich beim durchdebuggen, dass die veränderte start_perm genommen wird. Ich über- gebe jedoch "by value"--- Wo ist mein Denkfehler bzw. das Problem.. ich verzweifele echt gerade. Wäre euch sehr dankbar für Hilfestellungen. Gruß |
Re: Call by Value - wo ist mein Denkfehler?
Hallo,
ich hoffe ich liege jetzt nicht allzu verkehrt. Bei Array übergibst Du immer eine Referenz und nicht die Werte. Wenn Du das Original Array nicht verändern willst, solltest Du innerhalb der Prozedure mit einer Kopie arbeiten.
Delphi-Quellcode:
Grüße
Copy_of_Array1:=copy(Array1);
Klaus |
Re: Call by Value - wo ist mein Denkfehler?
vielen vielen Dank...
Gruß |
Re: Call by Value - wo ist mein Denkfehler?
Zitat:
mfg Christian |
Re: Call by Value - wo ist mein Denkfehler?
Dynamische Arrays sind einfach nur Pointer...wenn du diesen mit Call-By-Value übergibst wird ein zweiter Zeiger angelegt...der aber auf die gleiche Stelle wie Zeiger1 zeigt.
|
Re: Call by Value - wo ist mein Denkfehler?
Hab ich was anderes behauptet? Oder war das nur als Paraphrase gedacht? :gruebel:
mfg Christian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz