Ihr Verständnis ist, mehr oder weniger korrekt, obwohl der Mechanismus unterschiedlich ist.
Außer wenn es der Operanden der sizeof
oder unäre &
Operatoren oder ein Stringliteral verwendet wird eine andere Anordnung in einer Erklärung zu initialisieren, um einen Ausdruck vom Typ „N-Element-Array von T
“ wird konvertiert (“ Zerfall ") in einen Ausdruck vom Typ" Zeiger auf T
", und der Wert des Ausdrucks wird die Adresse des ersten Elements im Array sein. Dies gilt für alle Array-Typen, nicht nur für String-Literale.
Der Ausdruck "string1"
hat "8-Element-Array von char
" Typ; in der printf
Aufruf ist es kein Operand der sizeof
oder unary &
-Operatoren, noch wird es verwendet, um ein anderes Array zu initialisieren, so wird es implizit in einen Ausdruck des Typs "Zeiger auf char
" , deren Wert die Adresse ist des ersten Charakters.
1. 7 Buchstaben plus der 0-Terminator.
2. Dies ist der Fall in C; In C++ sind String-Literale Arrays von const char
, daher wird der Ausdruck in den Typ const char *
umgewandelt.
Ich sehe. Es ist einfach etwas, von dem ich wusste, dass es passieren muss, aber ich war neugierig, wie es umgesetzt wird. ein typedef macht Sinn. – sherrellbc
Ich sehe, Sie werden eine Referenz aus dem C-Standard hinzufügen, aber es ist nicht 'const char * 'unter C. –
@PaulGriffiths: Ja, danke. Ich habe es schon bearbeitet :) – LihO