Ergebnis 1 bis 12 von 12
  1. #1
    Riku_93 Riku_93 ist offline
    Avatar von Riku_93

    Hilfe bei Programmiersprache (call by reference)

    Hey Leute,

    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

  2. Anzeige

    Hilfe bei Programmiersprache (call by reference)

    Schau dir mal diesen Bereich an. Dort ist für jeden was dabei!
  3. #2
    HardAndSoft HardAndSoft ist offline
    Avatar von HardAndSoft

    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.

  4. #3
    Riku_93 Riku_93 ist offline
    Avatar von Riku_93

    AW: Hilfe bei Programmiersprache (call by reference)

    Und wie funktioniert das dann?

  5. #4
    Riku_93 Riku_93 ist offline
    Avatar von Riku_93

    AW: Hilfe bei Programmiersprache (call by reference)

    Ich meine, kann mir jemand durch ein Programm zeigen wiedas funktioniert.
    Auf der Pascal-Programmiersprache.

  6. #5
    Kelshan Kelshan ist offline
    Avatar von Kelshan

    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;
    }
    Das Wesentliche: Die Variable wird anfangs auf den Wert 5 gesetzt. Dann wird sie an die Methode übergeben, welche den übergebenen Parameter auf 22 ändert. Am Ende wird die Variable ausgegeben.

    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;
    }
    Das Wesentliche: Gleicher Aufbau wie oben, nur ist einParameter nun eine Referenz (Call by Reference halt). Bei C++ wird das einfach durch das "&"-Zeichen festgelegt.

    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.

  7. #6
    Nicoletta Nicoletta ist offline

    AW: Hilfe bei Programmiersprache (call by reference)

    In Pascal (Delphi) gibt es diesen "Fehler" nicht!

    Du änderst immer den Inhalt UND den Wert einer Variablen.

  8. #7
    DD64 DD64 ist offline
    Avatar von DD64

    AW: Hilfe bei Programmiersprache (call by reference)

    Zitat Sugar Beitrag anzeigen
    In Pascal (Delphi) gibt es diesen "Fehler" nicht!

    Du änderst immer den Inhalt UND den Wert einer Variablen.
    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;
    Das Schlüsselwort ist hier var im Prozeduren-Kopf. Bei var wird die Variable, welche in die Funktion "gegeben" wird, direkt verändert, es wird nicht nur ihr Wert benutzt.

  9. #8
    Nicoletta Nicoletta ist offline

    AW: Hilfe bei Programmiersprache (call by reference)

    zwei lokale Variablen..

  10. #9
    DD64 DD64 ist offline
    Avatar von DD64

    AW: Hilfe bei Programmiersprache (call by reference)

    Man kann die Variablennamen der Eingabeparameter der Prozeduren auch ändern. Das ändert nichts am Resultat.

  11. #10
    Dragonmind Dragonmind ist offline
    Avatar von Dragonmind

    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

  12. #11
    Kelshan Kelshan ist offline
    Avatar von Kelshan

    AW: Hilfe bei Programmiersprache (call by reference)

    Keine perfekte Analogie, denn wenn man die Äpfel aus dem Korb bekommt ist der Korb anschließend ja leer. Das Übernehmen der Äpfel (Call By Value Beispiel) würde also den Inhalt des Korbes verändern. Das passiert ja gerade NICHT.

    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.

  13. #12
    bennichamp bennichamp ist offline
    Avatar von bennichamp

    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


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

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

  3. HILFE mit Call of Duty:

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

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