kann mir jemand den Unterschied erklären?
Seite 1 von 1
Call By Reference Und Call By Result
Anzeige
#2
geschrieben 07. Februar 2008 - 05:02
Es sind zwei unterschiedliche Methoden zur Parameterübergabe bei Funktionsaufrufen.
Call-by-reference bedeutet, dass der Parameter innerhalb des Funktionskörpers auf den gleichen Speicherbereich zeigt wie der in der Hauptfunktion, von wo aus die Funktion gestartet wurde. Der Begriff ist ja auch praktisch selbsterklärend, wenn man weiß, dass eine Referenz eine Zeiger-Abart ist.
Call-by-result ist mir so kein Begriff. Ich nehme an, dass du Call-by-value meinst. Dabei werden Kopien von den übergegeben Parametern erstellt.
Zusammengefasst: Referenzen als Parameter sind dann interessant, wenn der übergebene Wert verändert werden soll. Bei der Übergabe per Kopie kann lediglich die Kopie in der Funktion bearbeitet werden, d.h. die ursprünglich als Parameter übergebenen Variablen werden nicht verändert.
Wenn das obige Kriterium keine Rolle spielt, ist es praktisch dir überlassen, wie du die Übergabe handhaben willst. Typischerweise benutzt man bei intrinsischen Datentypen die Kopieübergabe, bei Zusammengesetzten die Referenzübergabe.
So, hoffe, das war halbwegs verständlich. Naja, ist ja auch schon 5...
Call-by-reference bedeutet, dass der Parameter innerhalb des Funktionskörpers auf den gleichen Speicherbereich zeigt wie der in der Hauptfunktion, von wo aus die Funktion gestartet wurde. Der Begriff ist ja auch praktisch selbsterklärend, wenn man weiß, dass eine Referenz eine Zeiger-Abart ist.
Call-by-result ist mir so kein Begriff. Ich nehme an, dass du Call-by-value meinst. Dabei werden Kopien von den übergegeben Parametern erstellt.
Zusammengefasst: Referenzen als Parameter sind dann interessant, wenn der übergebene Wert verändert werden soll. Bei der Übergabe per Kopie kann lediglich die Kopie in der Funktion bearbeitet werden, d.h. die ursprünglich als Parameter übergebenen Variablen werden nicht verändert.
Wenn das obige Kriterium keine Rolle spielt, ist es praktisch dir überlassen, wie du die Übergabe handhaben willst. Typischerweise benutzt man bei intrinsischen Datentypen die Kopieübergabe, bei Zusammengesetzten die Referenzübergabe.
So, hoffe, das war halbwegs verständlich. Naja, ist ja auch schon 5...
#3
geschrieben 07. Februar 2008 - 06:20
Also, ich frage mich, warum einige Leute anscheinend erst irgendwo posten, und nicht mal eine Suchmaschine anwerfen...
http://de.wikipedia....ferenzparameter
http://de.wikipedia....28Informatik%29 (besonders: Parameterübergabe)
2x Wikipedia-Suche...
http://de.wikipedia....ferenzparameter
http://de.wikipedia....28Informatik%29 (besonders: Parameterübergabe)
2x Wikipedia-Suche...
Dieser Beitrag wurde von gl4di4t0r bearbeitet: 07. Februar 2008 - 06:21
CCNA - Cisco Certified Network Associate
DropBox Online Sync-Speicher
#4
geschrieben 07. Februar 2008 - 13:58
@der kenner: danke für die lange ausführung, aber das war mir klar. die frage ging schon um call by result
@gl4adi4t0r: den ersten link hatte ich auch schon angeschaut, da steht aber nichts von call by result. fündig wurde ich tatsächlich im 2ten, den ich bei meiner suche nicht gefunden hatte
@gl4adi4t0r: den ersten link hatte ich auch schon angeschaut, da steht aber nichts von call by result. fündig wurde ich tatsächlich im 2ten, den ich bei meiner suche nicht gefunden hatte
Zitat
Wertergebnisparameter (call by value/return oder call by value and result) erzeugen wie Wertparameter beim Aufruf zunächst eine Kopie des tatsächlichen Parameters. Bei Unterprogrammende wird der Inhalt des Parameters jedoch zurückgeschrieben. Dieser Parameterübergabemechanismus kann bei nebenläufigen Programmen eine andere Wirkung als die Verwendung von Referenzparametern haben, da während der Ausführungszeit des Unterprogramms ein anderer Thread auf die Variable in der aufrufenden Prozedur zugreifen kann.
#5
geschrieben 07. Februar 2008 - 14:33
Zitat (bLaCkRaBbIt: 07.02.2008, 13:58)
[...]
@gl4adi4t0r: [...] fündig wurde ich tatsächlich im 2ten, den ich bei meiner suche nicht gefunden hatte
@gl4adi4t0r: [...] fündig wurde ich tatsächlich im 2ten, den ich bei meiner suche nicht gefunden hatte
Komisch, hab eig nur call-by-result in die Suche eingegeben und die Ergebnisse kurz durchgeguckt
CCNA - Cisco Certified Network Associate
DropBox Online Sync-Speicher
#6
geschrieben 07. Februar 2008 - 16:14
Zitat
einige Leute anscheinend erst irgendwo posten, und nicht mal eine Suchmaschine anwerfen
Ja, ich bin schuldig, zumindest mitschuldig. Aber wenigstens hab ich was gelernt.
Thema verteilen:
Seite 1 von 1