Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Call by Value - wo ist mein Denkfehler? (https://www.delphipraxis.net/84711-call-value-wo-ist-mein-denkfehler.html)

TheDean 20. Jan 2007 14:21


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:

....  
       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;

   ....
Es geht hier um den Aufruf der Prozedur 'umgebungssuche' . Ich übergebe die Variable start_perm (vom Typ array of Integer);
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ß

Klaus01 20. Jan 2007 14:51

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:
Copy_of_Array1:=copy(Array1);
Grüße
Klaus

TheDean 20. Jan 2007 15:13

Re: Call by Value - wo ist mein Denkfehler?
 
vielen vielen Dank...

Gruß

r2c2 20. Jan 2007 15:42

Re: Call by Value - wo ist mein Denkfehler?
 
Zitat:

Zitat von Klaus01
Bei Array übergibst Du immer eine Referenz und nicht die Werte.

Fast. Bei einem dynamischen Array ist es immer eine Referenz. Bei einem statischen nicht...

mfg

Christian

dominikkv 20. Jan 2007 16:10

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.

r2c2 20. Jan 2007 16:14

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