Literal string-Initialisierung für ein Zeichen-array
In der folgenden Bestimmungen für den Fall, wenn array-Zerfälle zu Zeiger:
Einen lvalue [siehe Frage 2.5] vom Typ array von T, die in einem Ausdruck zerfällt (mit drei Ausnahmen) zu einem Zeiger auf sein erstes element; die Art der resultierende Zeiger ist Zeiger auf T.
(Die Ausnahmen sind, wenn das array ist der operand des sizeof-oder & - operator, oder ein literaler string-Initialisierung für ein Zeichen-array.)
Wie Sie zu verstehen ist der Fall, wenn das array "literal string-Initialisierung für ein Zeichen-array"? Einige Beispiel bitte.
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die drei Ausnahmen, bei denen ein array nicht zerfallen ist, in einen Zeiger, sind die folgenden:
Ausnahme 1. — Wenn der array ist der operand
sizeof
.Ausnahme 2. — Wenn der array-Operanden der
&
Betreiber.Ausnahme 3. — Wenn das array initialisiert wird mit einer Zeichenkette.
&a
Punkte, um das ganze array in der Erwägung, dass&a[0]
Punkte auf das erste elementa
. Also, wenn Sie drucken&a + 1
und&a[0] + 1
Sie wird anders sein, auch wenn&a
und&a[0]
Druck den gleichen Wert.Übernehmen die Erklärungen
In beiden Fällen, den Typ der string-literal "
This is a test
" ist "15-element-array von char". Unter den meisten Umständen, array-Ausdrücke werden implizit vom Typ "N-element-array von T" zu "Zeiger auf T", und der Ausdruck der Adresse des ersten Elements des Arrays. In der Erklärung fürbar
, das ist genau das, was passiert.In der Erklärung für
foo
, aber der Ausdruck wird verwendet zum initialisieren der Inhalt ein array, und ist daher nicht umgewandelt in einen Zeiger-Typ, sondern der Inhalt des string-literal kopiertfoo
."This is a test"
als eine string-Initialisierung ist ein array. Als Ausdruck, es zersetzt sich nicht zu einem Zeiger bleibt aber ein array. Ausgezeichnet.Dies ist ein literaler string-Initialisierung für ein Zeichen-array:
Könnte auch sein:
Definition von K&R2:
Wie es scheint, du hast das Zitat aus der comp.lang.c FAQ (vielleicht eine alte version oder vielleicht auch in der gedruckten version; es hat nicht ganz mit dem aktuellen Stand der online one):
http://c-faq.com/aryptr/aryptrequiv.html
Den entsprechenden Abschnitt links zu anderen Abschnitten der FAQ zu erarbeiten, diese Ausnahmen. In Ihrem Fall sollten Sie sich an:
http://c-faq.com/decl/strlitinit.html