AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Call by Value - wo ist mein Denkfehler?
Thema durchsuchen
Ansicht
Themen-Optionen

Call by Value - wo ist mein Denkfehler?

Ein Thema von TheDean · begonnen am 20. Jan 2007 · letzter Beitrag vom 20. Jan 2007
Antwort Antwort
TheDean

Registriert seit: 7. Jan 2005
Ort: Geislingen an der Steige
4 Beiträge
 
#1

Call by Value - wo ist mein Denkfehler?

  Alt 20. Jan 2007, 15:21
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ß
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Call by Value - wo ist mein Denkfehler?

  Alt 20. Jan 2007, 15:51
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.
Copy_of_Array1:=copy(Array1); Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
TheDean

Registriert seit: 7. Jan 2005
Ort: Geislingen an der Steige
4 Beiträge
 
#3

Re: Call by Value - wo ist mein Denkfehler?

  Alt 20. Jan 2007, 16:13
vielen vielen Dank...

Gruß
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#4

Re: Call by Value - wo ist mein Denkfehler?

  Alt 20. Jan 2007, 16:42
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
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Call by Value - wo ist mein Denkfehler?

  Alt 20. Jan 2007, 17:10
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.
Dominik
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#6

Re: Call by Value - wo ist mein Denkfehler?

  Alt 20. Jan 2007, 17:14
Hab ich was anderes behauptet? Oder war das nur als Paraphrase gedacht?

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:01 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