Zum Beispiel:Wie kann ein Zeiger eine Zeichenfolge als Wert haben?
const char* f = "123";
Soweit ich das beurteilen kann, hat f
die Adresse als seinen Wert. Aber warum? Sollte es keinen Fehler erzeugen?
Zum Beispiel:Wie kann ein Zeiger eine Zeichenfolge als Wert haben?
const char* f = "123";
Soweit ich das beurteilen kann, hat f
die Adresse als seinen Wert. Aber warum? Sollte es keinen Fehler erzeugen?
Der Wert des Zeigers ist nicht die Zeichenfolge, sondern die Speicheradresse des ersten Zeichens im Zeichenfolgenliteral.
Dies ist eine ausreichende Information, da String-Literale null-terminiert sind. Was passiert ist ein Array von Zeichen der Größe (Anzahl der Zeichen) +1 wird im Speicher erstellt. Der Wert des letzten Zeichens im Array ist '\0'
(wörtlich alle Bits Null), was das Ende des String-Literals signalisiert, so dass der Code, der dieses Array sequenziell liest, weiß, dass er diesen Index nicht überschritten hat.
Die Sprache gibt das an. Das ist die Bedeutung von "123". – SU3
Woher weiß der Compiler, was ich meinte? Mit derselben Logik sollte int * f = 2 bedeuten, dass f die Adresse ist, an der 2 gespeichert wird, aber nicht. –
Nein, das ist nicht die gleiche Logik. '2' und' 2' sind zwei verschiedene Dinge. Sie können sich String-Literale als Sonderfall vorstellen. Der Typ von "123" ist "const char [4]". Das ist ein Array von 'char' der Größe 4. Sie können das einem Zeiger zuweisen, da Array-Typen zu Zeigern auf das erste Element verfallen. – SU3
Die Literalzeichenfolge "123"
wird beim Ausführen des Programms aus der Programmdatei in den Prozessspeicher kopiert. In der Regel werden Literale in einem Nur-Lese-Speicher abgelegt. Deshalb ist const
erforderlich, wenn auf Zeichenfolgenliterale verwiesen wird. Und f
zeigt auf das erste Zeichen des Literals.
const char *f = "123";
// f[0] is '1'
// f[1] is '2'
// f[2] is '3'
// f[3] is '\0'
Sogar String-Literale haben eine Speicheradresse. –
Siehe diese Antwort: http://stackoverflow.com/a/9633233/1865694 –
Es ist keine Zeichenfolge. Es ist eine temporäre Reihe von Zeichen. –