Unterschied zwischen const int *p und int const *p



  • Gibt es einen Unterschied zwischen const int *p und int const *p ? Man hat mir mal gesagt, dass bei der einen Variante der Wert, der an der Adresse liegt, nicht verändert werden kann, während man bei der anderen Variante nicht verändern kann, worauf der Zeiger zeigt. Aber in der Praxis habe ich keinen Unterschied bemerkt:

    int a = 1;
    
    const int *p1 = &a;
    int const *p2 = &a;
    
    p1 = &a; // OK
    *p1 = 1; // Fehler
    
    p2 = &a; // OK
    *p2 = 1; // Fehler
    


  • es macht einen Unterschied, ob const vor oder nach dem * steht

    const int* p; // Pointer auf konstantes int
    int* const p = 0; // konstanter Pointer auf ein int
    


  • O.k., danke. Das war's, was ich falsch gemacht habe.



  • Nein es gibt keinen Unterschied. const ist linksbindend.

    int const * a; // const gehört zu int
    int * const b; // const gehört zum Zeiger *
    const int * c; // ist ein Sonderfall const gehört zu int 
    
    // Aber aufpassen:
    typedef int* PINT;
    
    const PINT d; // const bezieht sich auf PINT also das gleiche wie:
    int* const e; 
                  // und nicht! 
    const int* f;
    


  • DJohn@work schrieb:

    // Aber aufpassen:
    typedef int* PINT;
    const PINT d; // const bezieht sich auf PINT also das gleiche wie:
    int* const e; 
                  // und nicht! 
    const int* f;
    

    Oh, ein netter Unterschied zwischen #define und typedef. Gleich mal in eine Prüfung einbauen.



  • Das ist aber gemein (und gut!! :D)

    Ich würde vor allem mal den Beitrag auf bei parashift verlinken
    Const correctness


Anmelden zum Antworten