const char *s = "foo";

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

*const char s = “foo”;
in Übungsfolie 3.

Dass “foo” im Textsegment liegt ist klar,
aber wieso liegt *s nicht auch dort sondern im init. Daten?

thx


das const bezieht sich auf das Ziel des Zeigers, nicht auf den Zeiger selbst.

char servus[20];
char hallo[20];

int main() {
  const char *s=servus;

  s[4] = 'X'; /* geht nicht */
  s = hallo; /* geht */
  return 0;
}

Wenn der Pointer selbst const sein soll geht das folgendermaßen:

char * const s=servus;

und wenn beides const sein soll

const char * const s=servus;

Alternativ zu

const char *s=servus;

geht übrigens auch

char const *s=servus;

und alternativ zum doppelten const folglich auch

char const * const s=servus;

Alles klar :smiley: :smiley: :smiley:


Danke!

Muss es erstmal verdauen :slight_smile:


btw die Arrays im oberen Beispiel kämen natürlich selbst nicht ins Textsegment sondern in diesem Fall ins BSS, weil sie ja verändert werden können selbst wenn es einen Pointer auf sie gibt der es const deklariert. Sie können dann nur über diesen Pointer nicht verändert werden :wink: