const in Bezeichnern.



  • Hallo,
    was ist der Unterschied zwischen folgenden Deklarationen:

    const char* str;
    char* const str;
    const char* const str;

    const char* foo();
    char* const foo();
    const char* const foo();

    Bitte um Erklärung der Unterschiede.



  • ich machs mit int, das ist ein wenig eindeutiger

    int z = 5;
    int y = 9;
    
    const int* a = &z; // a zeigt auf die Speicheradresse von z
    *a = 4; // geht nicht, würde z verändern
    a = &y; // geht, a zeigt jetzt auf die Speicheradresse von y
    
    int* const a = &z;
    *a = 4; // geht, z ist jetzt 4
    a = &y; // geht nicht
    
    const int* const a = &z;
    *a = 4; // geht nicht
    a = &y; // geht nicht
    
    const char* foo(); // der Rückgabewert kann nicht verändert werden
    char* const foo(); // macht meines Erachtens keinen Sinn, weiß aber nicht, wie das in C ist
    const char* const foo(); // wieder ne Kombination aus den anderen beiden
    

    Grob gilt: Steht das const vor dem *, ist das Objekt, auf das der Zeiger zeigt nicht über diesen Zeiger veränderbar.
    Steht das const hinter dem *, kann der Zeiger nicht verändert werden, dafür aber das Objekt, auf das er zeigt

    Siehe auch dieser Thread, wo vor wenigen Tagen die gleiche Frage aufkam



  • Ah, ok. Das ist mir jetzt um einiges klarer. Danke!


Anmelden zum Antworten