was macht const?



  • In einem c-Programm für einen Microkontroller habe ich folgende globale deklaration gefunden:

    const SIO_TEXT *SIO_PcText;
    

    bei SIO_TEXT handelt es sich um eine struct:

    typedef struct {
      .
      .
      .
    } SIO_TEXT;
    

    Was mir klar ist, ist dass SIO_PcText ein Pointer auf eine struct vom typ SIO_TEXT ist.
    Mir ist jedoch nicht klar wiso davor const steht.
    Bisher dachte ich immser, dass const für Variablen verwendet wird, die nicht verändert werden dürfen. Jedoch habe ich in diesem Programm beispielsweise folgende Programmzeile gefunden:

    SIO_PcText = SIO_Text00;
    

    (SIO_Text00 ist ebenfalls ein Pointer auf eine struct vom typ SIO_TEXT).

    Hier wird doch der Wert des Pointers geändert?

    Kann mir jemand erklären was const an dieser Stelle bewirkt?



  • SIO_PcText = SIO_Text00;
    

    Ist SIO_Text00 auch ein Zeiger???

    das const bewirkt das du ein Zeiger auf ein const SIO_TEXT erzeugst!

    mfg hohesC



  • (SIO_Text00 ist ebenfalls ein Pointer auf eine struct vom typ SIO_TEXT).

    Hier wird doch der Wert des Pointers geändert?

    Kann mir jemand erklären was const an dieser Stelle bewirkt?

    sorry habe ich übersehen!

    nein der wert wird nicht geändert nur die Adresse!

    SIO_PcText = SIO_Text00;
    

    SIO_PcText wird die Adresse von SIO_Text00 zugewiesen!

    mfg hohesC



  • Also zusammen gefasst bedeutet das:

    const SIO_TEXT *SIO_PcText;
    

    ist ein Zeiger der auf ein

    const SIO_TEXT
    

    zeigen darf.
    Den Wert den der Zeiger enthält darf nicht geändert werden, jedoch die Adresse die hier

    SIO_PcText = SIO_Text00;
    

    geändert wird.

    mfg hohesC



  • Du erstellst einen Pointer auf eine konstante Variable des Typs SIO_TEXT. D.h. du kannst dem Pointer beliebige Adressen von Variablen des Typs SIO_TEXT zuweisen, jedoch kannst du die Variablen in ihrem Wert nicht ändern, sprich du hast nur einen lesenden Zugriff auf die Variable. Wenn du versuchst einen anderen Wert reinzuschreiben sollte dir der Compiler eine Fehlermeldung bringen.



  • @TheTester hmm... die Antwort auf die Frage wurde schon gegeben!
    Mal ein bisschen vorm Antworten lesen, dann wiederholt sich nicht alles!

    mfg hohesC



  • Danke, habs kapiert!
    🙂



  • kurf gefasst:

    const type* ptr;
    

    ist ein Zeiger auf ein konstantes Elemente von typ type. D.h. die Zeiger selber darf auf andere Adressen zeigen, der Inhalt darf aber nicht verändert werden, somit wäre das erlaubt

    const type var1=???;
    const type var2=???;
    const type* ptr = &var1;
    ptr = &var2;
    

    aber dies hier nicht erlaubt

    const type var=???;
    const type* ptr = &var;
    *ptr = ???; /* oder ptr[0]=???; */
    

    weil du den Inhalt von var, nicht verändern darfst.

    ---

    type *const ptr;
    

    ist ein konstanter Zeiger auf ein Element von Typ type. D.h. ptr darf nicht auf andere Elemente zeigen, jedoch kannst du den Inahlt verändern.

    Erlaubt:

    *ptr = ???;
    

    nicht erlaubt:

    type var6;
    ptr = &var6;
    
    const type *const ptr;
    

    ist ein kostanter Zeiger auf ein konstantes Element von Typ type. Da darfst du weder die Adresse noch den Inhalt verändern.



  • supertux schrieb:

    type const *ptr;
    

    ist ein konstanter Zeiger auf ein Element von Typ type. D.h. ptr darf nicht auf andere Elemente zeigen, jedoch kannst du den Inahlt verändern.

    Du meinst 'type *const p'. Das was Du da hingeschrieben hast, bedeutet das gleiche, wie 'const type *p'.



  • Daniel E. schrieb:

    supertux schrieb:

    type const *ptr;
    

    ist ein konstanter Zeiger auf ein Element von Typ type. D.h. ptr darf nicht auf andere Elemente zeigen, jedoch kannst du den Inahlt verändern.

    Du meinst 'type *const p'. Das was Du da hingeschrieben hast, bedeutet das gleiche, wie 'const type *p'.

    Ja genau, ich hab mich verschrieben.


Anmelden zum Antworten