pointer zeigt worauf?



  • Ich hätte eine Frage zu Pointern, deren Verweisen.

    Ich habe es mir so notiert, dass je nach Dimension des Pointers immer eine bestimmte Anzahl von Verkettungen zurück gesprungen wird.

    Z.B. bei einem int ***aa Pointer würde bei **a 2 verkettungen zurückgesprungen werden. Ist das richtig, vom Denken her?

    Ich würde bspw. tippen, dass bei **ee hier auf die Adresse von cc verwiesen wird. Bei *ee würde er auf dd zeigen und nicht auf &cc, da &cc 2 Sprünge entfernt ist. Ist diese Denkweise falsch? Es geht mir halt darum zu unterscheiden auch wenn die Adressen gleich sind, ob ich nun 2 Sprünge gemacht habe oder nur einen.

    Bsp:

    int aa=0xab; int *cc = &aa; int **dd=&cc; int ***ee=ⅆ
    
    std::cout << cc << std::endl;
    std::cout << dd << std::endl;	
    std::cout << ee << std::endl;	
    std::cout << &cc << std::endl;
    std::cout << *dd << std::endl;
    std::cout << &dd << std::endl;
    std::cout << **ee << std::endl;//geht 2 pointer"-verkettungen" zurück
    std::cout << *ee << std::endl;//geht 1 pointer"-verkettung" zurück
    

    Danke!

    mfg


  • Mod

    Ich würde bspw. tippen, dass bei **ee hier auf die Adresse von cc verwiesen wird. Bei *ee würde er auf dd zeigen und nicht auf &cc, da &cc 2 Sprünge entfernt ist. Ist diese Denkweise falsch?

    Doch, das ist richtig.



  • Hm - also bei den Formulierungen, die man bei pointern verwendet kann man schnell aneinander vorbeireden 🙂

    Wenn du ee zweimal dereferenzierst erhälst du die Speicheradresse von aa und nicht von cc, welches aber natürlich der Wert von cc ist.

    Also

    **ee==&aa
    

    oder auch

    **ee==cc
    

    Die Adresse von cc wäre ja &cc. Die erhälst du wenn du ee nur einmal dereferenziertst.


Anmelden zum Antworten