Ergebnis 1 bis 12 von 12
-
01.12.2011, 14:03 #1Riku_93
Hilfe bei Programmiersprache (call by reference)
bin grad im Info-Unterricht und blicke einfach nicht durch!!
Hab call by reference schon gegooglet, jedoch check ich das nicht....
Kann mir jemand vll. auf NORMALDEUTSCH erklären was das ist wie das angewendet werden kann?
Bin dankbar für jede Antwort die mich voranbringt..
MFG
-
Hilfe bei Programmiersprache (call by reference)
Schau dir mal diesen Bereich an. Dort ist für jeden was dabei!
-
01.12.2011, 14:35 #2HardAndSoft
AW: Hilfe bei Programmiersprache (call by reference)
Hi Riku,
es gibt call by value und call by reference.
Call by reference heißt, Du übergibst dem Unterprogramm die Originalvariable. Alles, was Du mit dieser Variable machst, wirkt automatisch auch im übergeordneten Programm.
Im wahren Leben hieße das: Du leihst einem Kumpel Deine CD.
Call by value heißt, Du übergibst dem Upro den Wert der Variable. Du kannst dann im Upro machen, was Du willst - im aufrufenden Programm ändert sich der Wert dieser Variable nicht.
Im wahren Leben hieße das: Du kopierst eine CD und gibst die Deinem Kumpel. Dann kann Dir egal sein, was der damit macht.
-
08.12.2011, 11:41 #3Riku_93
AW: Hilfe bei Programmiersprache (call by reference)
Und wie funktioniert das dann?
-
08.12.2011, 12:03 #4Riku_93
AW: Hilfe bei Programmiersprache (call by reference)
Ich meine, kann mir jemand durch ein Programm zeigen wiedas funktioniert.
Auf der Pascal-Programmiersprache.
-
09.12.2011, 19:04 #5Kelshan
AW: Hilfe bei Programmiersprache (call by reference)
In Pascal nicht, das habe ich nun schon mehr als ein Jahrzehnt nicht mehr angeschaut. Aber es sollte ja in C++ genauso funktionieren.
Also ein einfaches Beispiel für Call By Value:
Code:void eineMethode(int einParameter) { einParameter = 22; } int main(){ int eineVariable = 5; eineMethode(eineVariable); printf("Die Variable enthält den Wert %i", eineVariable); //Gibt einfach nur den Text Die Variable enthält den Wert <Wert> aus return 0; }
Was passiert? Die Ausgabe wird am Ende sagen: "Die Variable enthält den Wert 5", obwohl die Methode ihn ja auf 22 geändert hat. Das liegt daran, dass in diesem Sinne nicht die Variable an die Methode übergeben wurde, sondern nur der Wert, der darin steht. Also eine 5. Die Methode speichert also die 5 in eine eigene lokale Variable (einParameter). Wenn einParameter nun verändert wird, hat das nur Einfluss auf das, was in eineMethode passiert, danach ist die lokale Variable wieder futsch. eineVariable bleibt dagegen die ganze Zeit auf dem Wert 5.
Nun das gleiche Beispiel mit Call By Reference:
Code:void eineMethode(int &einParameter) { einParameter = 22; } int main(){ int eineVariable = 5; eineMethode(eineVariable); printf("Die Variable enthält den Wert %i", eineVariable); return 0; }
Was passiert? Die Ausgabe wird am Ende sagen: "Die Variable enthält den Wert 22". Das liegt daran, dass die Methode nun nicht nur einen abstrakten Wert als Parameter übergeben bekommt, sondern die Variable selbst (man könnte auch sagen "den Behälter"). Wenn die Methode den Wert nun ändert, so wird er eben direkt im "Originalbehälter" verändert, und somit wird letztlich "eineVariable" auf 22 gesetzt. Wenn man so will sind eineVariable und einParameter dann einfach nur zwei Namen für die gleiche Variable.
Vielleicht hilft das ja ein wenig beim Verständnis. Wie gesagt, Pascal kann ich leider nicht mehr so wirklich.
-
09.12.2011, 20:12 #6Nicoletta
AW: Hilfe bei Programmiersprache (call by reference)
Du änderst immer den Inhalt UND den Wert einer Variablen.
-
09.12.2011, 21:16 #7DD64
AW: Hilfe bei Programmiersprache (call by reference)
Das Stimmt leider nicht.
In Delphi sieht das ganze so aus:
Code:var eineVariable : Integer; implementation // Simples verdoppeln procedure TForm1.eineMethode(var eineVariable : integer); begin eineVariable := eineVariable * 2; end; procedure TForm1.einezweiteMethode(eineVariable : integer); begin eineVariable := eineVariable * 2; end; procedure TForm1.FormCreate(Sender: TObject); begin eineVariable := 5; eineMethode(eineVariable); Showmessage(inttostr(eineVariable)); // GIBT 10 aus eineVariable := 5; einezweiteMethode(eineVariable); Showmessage(inttostr(eineVariable)); // GIBT 5 aus end;
-
09.12.2011, 22:00 #8Nicoletta
AW: Hilfe bei Programmiersprache (call by reference)
zwei lokale Variablen..
-
09.12.2011, 22:09 #9DD64
AW: Hilfe bei Programmiersprache (call by reference)
Man kann die Variablennamen der Eingabeparameter der Prozeduren auch ändern. Das ändert nichts am Resultat.
-
10.12.2011, 12:22 #10Dragonmind
AW: Hilfe bei Programmiersprache (call by reference)
Seh den Aufruf wie ein Korb Äpfel:
By value: Du nimmst nur die Äpfel aber nicht den Korb. Das heißt du hast auch kein Zugriff auf den Korb.
By Reference: Du nimmst den kompletten Korb, damit kannst du auch mit dem Korb machen was du willst.
Bei beiden Varianten kannst du auf die Äpfel zugreifen aber nur beim letzteren auf den Korb.
Das heißt als Programmierer: By value gibt dir nur den Inhalt einer Variablen oder Objects, by Reference bekommst du die Speicheradresse also die komplette Variabe oder Object
-
10.12.2011, 13:16 #11Kelshan
AW: Hilfe bei Programmiersprache (call by reference)
Da ist die Variante mit den CDs, die wir hier schon hatten, besser: Dein Kumpel will eine CD von dir haben. Call By Reference: Du gibst ihm deine Original CD. Er kann da nun Kratzer reinhauen oder (wenn dynamisch wiederbeschreibbar) Dateien löschen oder hinzufügen, also den Inhalt des Originals verändern. Call By Value: Du gibst ihm nicht das Original, sondern brennst ihm fix eine komplette Kopie. Was er dann damit macht ist sein Bier und kratzt dich nicht.
-
10.12.2011, 15:37 #12bennichamp
AW: Hilfe bei Programmiersprache (call by reference)
Das mit der CD finde ich auch logischer^^
Beim Programmieren (C++) ist das Ganze so:
- Call by value: Beim Funktionsaufruf wird eine Kopie der Variablen erstellt. Diese Variable hat den selben Wert, den selben Typ aber eine andere Speicheradresse. Wenn nun in der Funktion die Variable geändert wird, wird nicht der originale Speicherbereich geändern und somit bleibt die erste Variable gleich. Nach dem Funktionsaufruf hat die Variable den selben Wert.
- Call by reference: Beim Funktionsaufruf wird die Speicheradresse der Variablen übergeben (bei C++ in einem Zeiger gespeichert). Wenn die Variable jetzt in der Funktion geändert wird, hat das Auswirkungen auf den originalen Speicherbereich und die Variable hat nach dem Funktionsaufruf einen anderen Wert.
Grüße benni
Ähnliche Themen
-
Programmiersprache visual c++ und das erlernen: Hallo, bezogen auf die alte Frage mit MS Access, die ja jetzt nicht mehr hier existiert, wollte ich folgende Frage stellen: Ich möchte ein Programm... -
HILFE mit Call of Duty: Hallo, ich habe mir gestern die UK version von call of duty 5 (xbox 360) bestellt weil nur auf der UK und auf der US den zombie modus gibt. Ich... -
HILFE mit Call of Duty: -
Hilfe bei Call of duty 4 Problem: wenn ich das spiel starte und dann onlien spielen möchte und auf suche nach spielen gehen will, dann steht dort: SpieleinstellungsDownlode... und läd... -
Call of Duty 5 - Veteran Hilfe: Könnte/t einer/ihr mir ein paar Tipp zu Veteran in CoD 5 geben, wäre echt nett:D
Nr.22 - Life is Strange: Double Exposure Ich hab grad ein bisschen Urlaub und die Tage das Spiel platiniert. Dazu muss man es mindestens...
Wie oft habt ihr Platin?