Referenz in C



  • Nabend,

    ich bin mal wieder dabei meine C-Kenntnisse noch zu vertiefen und würde gerne wissen ob mir hier p ähnlich wie in C++ eine Referenz auf my_int liefert, da ich ja den Zeiger nicht mehr ändern kann?

    int my_int = 42;
    int * const p = &my_int;
    

    Gruß Chris



  • Es gibt keine Referenzen in C. Konstante Zeiger gibt es aber auch in C++.



  • Was unterscheidet denn eine Referenz in C++ von einem konstanten Zeiger ausser dass der Syntrax etwas anders ist?



  • justchris schrieb:

    Was unterscheidet denn eine Referenz in C++ von einem konstanten Zeiger ausser dass der Syntrax etwas anders ist?

    Soweit ich weiß kann man über einen konstanten Zeiger keine Daten ändern, egal ob diese Daten konstant sind oder nicht.

    Also:

    int my_int = 42;
    int * const p = &my_int;
    my_int = 8 // Kein Problem
    *p = 5 // Fehler wegen konstanten Pointer
    

    Eine Referenz auf my_int kann aber my_int ändern.



  • Tobiking2 schrieb:

    Soweit ich weiß kann man über einen konstanten Zeiger keine Daten ändern, egal ob diese Daten konstant sind oder nicht.

    falsch.



  • SG1 schrieb:

    Tobiking2 schrieb:

    Soweit ich weiß kann man über einen konstanten Zeiger keine Daten ändern, egal ob diese Daten konstant sind oder nicht.

    falsch.

    Stimmt, das konstant bezieht sich nur darauf das man den Zeiger nicht auf eine andere Speicheradresse zeigen lassen kann.

    Dafür hab ich grad nachgeschlagen. Im Buch von Stroustrup steht drin, dass man sich eine Referenz wie einen konstanten Zeiger vorstellen kann, der immer dereferenziert wird wenn man ihn benutzt. Allgemein ist eine Referenz aber nur ein anderer Name für ein Objekt und wird in den meisten Fällen komplett wegoptimiert.



  • Tobiking2 schrieb:

    Stimmt, das konstant bezieht sich nur darauf das man den Zeiger nicht auf eine andere Speicheradresse zeigen lassen kann.

    kannst ja alles 'const' machen, so etwa: const int * const p = ...

    Tobiking2 schrieb:

    Im Buch von Stroustrup steht drin, dass man sich eine Referenz wie einen konstanten Zeiger vorstellen kann, der immer dereferenziert wird wenn man ihn benutzt. Allgemein ist eine Referenz aber nur ein anderer Name für ein Objekt und wird in den meisten Fällen komplett wegoptimiert.

    stimmt, aber genauso kann ein compiler auch einen normalen pointer wegoptimieren. kommt drauf an, wie der pointer im darauffolgenden code verwendet wird. ein fähiger compiler hat sowas wie 'ne mustererkennung eingebaut.
    das mit dem alias-namen aka 'c++-referenz' kriegste zum teil mit makros hin, ist aber oft nicht besonders sinnvoll.
    🙂


Anmelden zum Antworten