Frage zu const char *str ="ABC";



  • Hallo

    Wie schon in einem anderen Betrag geschrieben beschäfige ich mich mit C/C++ und hätte da eine Frage zur Verständnis.

    Es geht um die definition dieser C-Zeichenkette(string).

    const char* str = "ABC";
    

    Diese Zeichenkette müsste jetzt 4 Zeichen enthalten:

    1. A
    2. B
    3. C
    4. \0 --> fügt der Compiler selbstständig ein

    In meinem Buch steht jetzt folgender Text dazu:

    Im Gegensatz zu C-Arrays werden Stringliterale bei vielen Systemen im schreibgeschützten Speicher angelegt: Eine Änderung wie str[0] = 'X'; führt dann zu einer Laufzeitfehlermeldung.(Ist mir klar) Deswegen: Zeiger auf Textliterale stets als const char* deklarieren. Eine neue Zuweisung str = "Neuer Text"; ist möglich, wobei gleichzeitig die Informationen über die vorherige Stelle verloren gehen.

    So jetzt zu meiner Frage:

    const bezieht sich immer auf den Ausdruck der links davon steht.
    Nur wenn links vom Schlüsselwort const nichts / eine öffnende Klammer ist, bezieht es sich auf das, was rechts davon steht.

    Hier steht links nicht bei const, also müste sich const auf char * beziehen. Wie kann es dann sein das ich dem Zeiger eine neue Adesse zuweisen kann?

    Schon mal Danke für euer Hilfe.

    mfg
    Fujittsu


  • Mod

    Das const bezieht sich auf das char, nicht auf char*. Du hast da auf deutsch gesagt einen (veränderlichen) Zeiger auf einen konstanten char. Oder wenn du deine "von rechts nach links lesen"-Regel anwenden willst, ist const char * äquivalent zu char const * .

    Wie schon in einem anderen Betrag geschrieben beschäfige ich mich mit C/C++ und hätte da eine Frage zur Verständnis.

    Ich empfehle dir, nicht beide Sprachen zu mischen, sonst lernst du keines von beidem. C und C++ sind von der Denkweise her sehr sehr unterschiedlich und auch ein Mischen von Sprachmitteln geht praktisch immer schief.



  • Danke für die Hilfe.

    mfg
    Fujittsu


Anmelden zum Antworten