Verständnisfrage zu C-Strings



  • Ich wünsche der Forencommunity einen wunderschönen guten Abend und möchte mich schon jetzt für jegliche Antwort bedanken! 🙂

    Meine Frage wäre, wie genau z.B. das hier funktioniert:

    const char* cstr = "Hello World!";
    

    Es wurde doch gar kein Speicherplatz dafür angefordert. Wie kann diese Variable dann also einfach benutzt werden?

    int* i = 14
    

    würde doch auch nur dem Zeiger i die Speicheradresse 14 zuweisen, oder?

    Und, wenn ich schon gerade dabei bin, mit simplen Fragen zu stören:
    const char* war doch das gleiche wie char const*, richtig? Und das heißt, dass der Zeiger nicht verändert werden darf, aber der Inhalt?
    Und char* const war, dass der Zeiger verändert werden darf, der Wert an der Speicheradresse aber konstant bleiben muss.
    Stimmt das soweit oder habe ich das irgendwie verdreht? 🙄



  • <b>HelloWorld</b schrieb:

    Ich wünsche der Forencommunity einen wunderschönen guten Abend und möchte mich schon jetzt für jegliche Antwort bedanken! 🙂

    Meine Frage wäre, wie genau z.B. das hier funktioniert:

    const char* cstr = "Hello World!";
    

    Es wurde doch gar kein Speicherplatz dafür angefordert. Wie kann diese Variable dann also einfach benutzt werden?

    Das "Hello World" wird in einem (read only) Speichersegment angelegt und der Pointer darauf gesetzt. Das geschieht alles automatisch.



  • Und, wenn ich schon gerade dabei bin, mit simplen Fragen zu stören:
    const char* war doch das gleiche wie char const*, richtig? Und das heißt, dass der Zeiger nicht verändert werden darf, aber der Inhalt?
    

    Ja, das ist das gleiche. Aber es ist anders herum - der Zeiger kann verändert werden, das worauf er zeigt nicht.



  • zar schrieb:

    Und, wenn ich schon gerade dabei bin, mit simplen Fragen zu stören:
    const char* war doch das gleiche wie char const*, richtig? Und das heißt, dass der Zeiger nicht verändert werden darf, aber der Inhalt?
    

    Ja, das ist das gleiche. Aber es ist anders herum - der Zeiger kann verändert werden, das worauf er zeigt nicht.

    Nochwas exotisches: const hinter dem Zeiger-Stern macht den Zeiger konstant: char* const .
    In diesem Fall darf tatsächlich der Inhalt, aber nicht der Zeiger verändert werden - aber am besten nicht
    zu viel Hirnspeicher verschwenden, um sich das zu merken, das braucht man vielleicht einmal in 50 Jahren 😉



  • Und der Vollständigkeit dann noch:

    const char * const cstr = "Hello World!";
    // bzw. gleichwertig dazu
    char const * const cstr = "Hello World!";
    

    Sowohl der Zeiger als auch der Inhalt sind konstant.


Anmelden zum Antworten