Variablen aus übergeordneten Funktionen verändern



  • Ich hab ein kleines Verständnisproblem :

    Folgende Vorraussetzung :

    ich habe eine Funktion main, in der eine Variable x existiert. Diese Main Funktion ruft eine Funktion Keks auf, in welcher ich die Variable x verändern will. Wichtig ist hierbei, das ich eben keine neue lokale Varaible anlegen sondern, die aus Funktion x stammende Variable verändern möchte, so das ich mit einer evtl aus main aufgerufenen Funktion Blub nun auf diese Veränderte Variable zugreifen kann.

    Ich erinnere mich grau das da mal was mit

    void Keks(*x)
    

    oder

    void Keks(&x)
    

    war. Ich erinnere mich auch das das mit dem * ein Pointer war aber das mit dem & is mir noch nicht so ganz klar und erschließt sich mir aus meinem Buch leider auch nicht ganz.

    Wenn da jemand ne Lösung und / oder am besten auch noch eine Kurze erklährung hat währe das sehr nett.

    Danke schonmal im vorraus ...



  • http://tutorial.schornboeck.net/referenzen.htm

    // Das ist eine normale Variable
    int a = 1;
    // Das ist eine Referenz auf a
    int &ref = a;
    // Das ist ein Zeiger auf die Adresse von a
    int *ptr = &a;
    

    Änderst du ref, änderst du auch a. Änderst du den Wert von ptr (*ptr=5), änderst du auch a. 🙂 Hoffe das war verständlich :D.
    rya.



  • Du kannst entweder Pointer (Adressen, die auf eine Position im Speicher verweisen) verwenden oder Referenzen (Alias-Namen für Variablen):

    //Variante 1 (Zeiger):
    //für die Verwendung muß der übergebene Zeiger dereferenziert werden (*px ist die Variable, auf die px zeigt)
    //beim Aufruf mußt du die Adresse (per &) ermitteln und übergeben
    void Keks_ptr(int* px)
    {
      *px = 4711;
    }
    
    ...
    int x;
    Keks_ptr(&x);
    ...
    //Variante 2 (Referenz):
    //Dereferenzieren und Adressermittlung entfallen - das erledigt der Compiler hinter den Kulissen
    void Keks_ref(int& rx)
    {
      rx = 4711;
    }
    
    ...
    int x;
    Keks_ref(x);
    ...
    

Anmelden zum Antworten