Const Pointer



  • Wie merkt ihr euch, ob der Poniter const ist oder die Variable, gibts da ne Merkhilfe?

    const int *variable;
    int* const variable;
    


  • Ja, gucken welcher Typ links vom Sternchen steht.



  • So wie der Compiler: Einfach von Rechts nach Links lesen:

    int const * const a;
    /// Konstanter Pointer auf konstantes int.
          const       *          const    int
    
    int const * a;
    /// Pointer auf konstantes int.
           *          const    int
    


  • Es gibt ja quasi 3 Positionen für das const :

    const int * //konstanter Zeiger
    int const * //Zeiger auf konstantes int
    int *const //konstanter Zeiger
    

    Die zweite Position musst du immer machen, für sie gibt es keine Alternative. Aber wenn du dich zwischen erster und dritter entscheiden musst, nimm besser die dritte und merk dir: links vom const steht das, was const ist.
    Abgesehen davon passieren dir dann solche Missgeschicke hoffentlich nicht:

    int *const a(nullptr), *b(nullptr); //b ist jetzt kein konstanter Zeiger
    int *const c(nullptr), *const d(nullptr); //jetzt sind es beide
    


  • Huch? Variante 1 und 2 sind doch dasselbe, was erzählst Du da.

    Es geht darum, auf welcher Seite vom * das const steht!

    const int* ptr; // Zeiger auf ein int (, das konstant ist)
    int const* ptr; // Zeiger auf ein konstantes int (= dasselbe)
    int* const ptr; // konstanter Zeiger auf ein int
    

    Einfach von rechts nach links lesen, * dabei als Zeiger aussprechen und dann macht man es richtig.



  • Man kann es auch von Links nach Rechts lesen, man muss es dann nur einfach anders lesen.
    int const * ist dann ein Integer-Konstanten-Zeiger und
    int * const ist eine Integer-Zeiger-Konstante.



  • Der Tobi schrieb:

    const int * //konstanter Zeiger
    

    Man sollte schon meinen Beitrag lesen bevor man antwortet. 🤡



  • hustbaer:
    Und wenn sich der geneigte Leser beides behält, vertauscht er es im richtigen Moment mit Sicherheit. 🤡


Log in to reply