Pointer und Reference



  • Hi,

    warum übergibst du hier

    pointer(&b)
    

    (also die Adresse der Variabeln) ich hätte das so gemacht:

    int b = 8;
        int* c = &b;
        pointer(c);
    

    c enthält ja auch die Adresse der Variablen b. Allerdings warum hast du hier keinen Zeiger mit "int* c" angelegt?

    Viele Grüße



  • Tom83 schrieb:

    Hi,

    warum übergibst du hier

    pointer(&b)
    

    (also die Adresse der Variabeln) ich hätte das so gemacht:

    int b = 8;
        int* c = &b;
        pointer(c);
    

    c enthält ja auch die Adresse der Variablen b. Allerdings warum hast du hier keinen Zeiger mit "int* c" angelegt?

    Viele Grüße

    Weil es nicht notwendig ist. Der Parameter (d.h. die Adresse von b) wird sowieso in den Stack-Bereich der Funktion kopiert, da ist es nicht notwendig, noch eine eigene Variable dafür anzulegen.



  • Hi,

    wie schauts dann aus, wenn ich so ein Konstrukt habe:

    //call by VALUE     
      void test3 (int q) {
           q = 77777;
           cout << " BEI q steht folgendes " << q << endl;
           }
    
        int s =99;
        int *r = &s;
        test3(*r);
        cout << "Der Wert von *r :" << *r << endl;
        cout << "Der wert von s:  " << s << endl;
    

    Nennt man das dass call by Value, oder hat das einen anderen Namen, weil ich einen derefferenzierten Zeiger übergebe?

    Viele Grüße



  • Das ist call by value, weil die Funktion einen Wert übergeben bekommt. Woher dieser Wert stammt, ist für den Aufruftyp unerheblich.

    Rein technisch gesehen ist auch die Zeiger-Variante "call by value" (allerdings mit einem "int*" Wert), semantisch wurde sie in C verwendet, um "call by reference" Semantik nachzubilden.



  • Hi!

    Danke!

    Ich hab mich jetzt mal an das Thema Zeiger auf Zeiger rangewagt:

    int s =99;
        int *r = &s;
        int **zeigeraufzeiger;
        int ***zeigeraufzeigeraufzeiger;
    
        zeigeraufzeiger = &r;
        zeigeraufzeigeraufzeiger = &zeigeraufzeiger;
    
        cout << "Adresse von s (&s)                                " << &s <<endl;
        cout << "Wert des Zeigers r (r)                            " << r << endl;
        cout << "Adresse des Zeiger r (&r)                         " << &r << endl;
        cout << "Wert des zeigeraufzeiger (z...)                   " << zeigeraufzeiger << endl;
        cout << "Adresse des zeigersaufzeiger (&z...)              " << &zeigeraufzeiger << endl;
        cout << "Wert des zeigeraufzeigeraufzeiger (z...)          " << zeigeraufzeigeraufzeiger << endl;
        cout << "Adresse des zeigeraufzeigeraufzeiger (&z...)      " << &zeigeraufzeigeraufzeiger << endl <<endl << endl;
    
        cout << "Wert von s                                                            " << s << endl;
        cout << "Wert des Zeigers r                                  (*r)              " << *r << endl;
    
        cout << "zeigeraufzeiger (z...) " << zeigeraufzeiger << endl;
        cout << "Wert des Zeigers zeigeraufzeiger (*zei...) (wert von r)                " <<*zeigeraufzeiger << endl;
        cout << "Wert des Zeigers zeigeraufzeiger (**zei...) (wert von s)               " << **zeigeraufzeiger << endl <<endl;
    
        cout << "zeigeraufzeiger (z...) " << zeigeraufzeigeraufzeiger << endl;
        cout << "Wert Zeiger zeigeraufzeigeraufzeiger (*z...)(wert von zeigeraufzeiger) " << *zeigeraufzeigeraufzeiger << endl;
        cout << "Wert des Zeigers zeigeraufzeigeraufzeiger (**z...) (Wert von r)        " << **zeigeraufzeigeraufzeiger << endl;
        cout << "Wert des Zeigers zeigeraufzeigeraufzeiger (***z..) (Wert von s)        " << ***zeigeraufzeigeraufzeiger << endl;
    

    Stimmen meine Angaben so?

    Viele Grüße



  • Nicht ganz.
    Zeile 18: Ziel des Zeigers
    Zeile 22: Ziel des Zeigers
    Zeile 23: Ziel des Zieles des Zeigers

    Zeile 27: Ziel des Zeigers
    Zeile 28: Ziel des Zieles des Zeigers
    Zeile 29: Ziel des Zieles des Zieles des Zeigers


Anmelden zum Antworten