String literals sind wirklich Arrays von konstanten Zeichen (mit dem einschließenden Terminator).
Wenn Sie
tun
const char *cp = "Hello world";
Sie machen cp
Punkt auf das erste Zeichen des Arrays.
Ein wenig mehr Erklärung: Arrays (nicht nur C-Strings Arrays von char
aber alle Arrays) natürlich zerfällt auf Zeiger auf ihr erstes Element.
Beispiel
char array[] = "Hello world"; // An array of 12 characters (including terminator)
char *pointer1 = &array[0]; // Makes pointer1 point to the first element of array
char *pointer2 = array; // Makes pointer2 point to the first element of array
einem Array ist das gleiche wie ein Zeiger auf das erste Element immer, also in der Tat gibt ist ein Adressoperator &
beteiligt sind, aber es ist implizit und nicht explizit verwendet.
Wie einige von euch haben vielleicht festgestellt, wenn cp
erklären oben I const char *
als Typ verwendet wird, und in meinem Array-Beispiel mit pointer1
und pointer2
ich einen nicht konstanten Ebene char *
-Typ verwendet. Der Unterschied besteht darin, dass das Array, das vom Compiler für Zeichenfolgenliterale erstellt wird, Konstante in C++ ist, sie können nicht geändert werden. Der Versuch wird zu undefined behavior führen. Im Gegensatz dazu ist das Array, das ich in meinem letzten Beispiel erstellt habe, nicht konstant, es ist modifizierbar und daher müssen die Zeiger darauf nicht const
sein.
'" Hallo Welt "' Dies ist keine Zeichenfolge. Deshalb ist es möglich. – DimChtz
in C und C++ String ist ein Array von char Elemente und Array-Adresse des ersten Elements gleich –
Es ist ein C-String. Im Kern ist es nur eine Reihe von Zeichen, die Sie nicht ändern können. – StoryTeller