Initialisieren char-array in C
Ich bin mir nicht sicher, was in das char-array nach der Initialisierung in der folgenden Weise:
char buf[5]={0,};
Ist das äquivalent zu
char buf[5]={0,0,0,0,0};
- Ich denke, man kann auch schreiben
char buf[5] = ""
; das entspricht auch der - Ja, Sie sind gleichwertig. Bitte beachten Sie, dass
char buf[5] = {4};
entsprichtchar buf[5] = {4,0,0,0,0};
. momentan akzeptierte Antwort spielt auf diese Tatsache mit dem Zitat aus dem C11 standard: "der Rest der Summe soll initialisiert werden, werden implizit die gleichen wie die Objekte, diestatic
Lagerung Dauer." Dies gilt auch für Struktur-Typen sind zusammengesetzte Typen. Nicht referenzierte Mitglieder/sub-Objekte w.r.t. bezeichnet Initialisierungen Verhalten sich auf die gleiche (char buf[5] = {[2] = 2};
entsprichtchar buf[5] = {0,0,2,0,0};
) char buf[5] = {0}
entsprichtchar buf[5]={0,}
äquivalent zuchar buf[5]={0,0,0,0,0};
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, es ist das gleiche. Wenn es weniger Anzahl der Initialisierungen, als die Elemente in dem array, dann die restlichen Elemente werden initialisiert, wenn die Objekte haben statische Speicher Dauer (D. H., mit
0
).So,
entspricht
Verwandte Lesen : Von der
C11
standard-Dokument, Kapitel 6.7.9, Initialisierung,Ja, wenn Sie initialisiert ein element im array zu
0
den rest eingestellt sind0
Beides das gleiche
Ja.
entspricht
Wenn der Initialisierer ist kürzer als die array-Länge, dann die übrigen Elemente dieses Arrays auf den Wert
0
implizit.Sollten Sie auch beachten, dass
{0,}
(trailing Kommas lässt array einfacher zu ändern) ist äquivalent zu{0}
als eine Initialisierungsliste.{0,}
ebenfalls äquivalent zu{0}
im C89, wo Sie in der Regel keine Kommas am Ende eine Komma-separierte Liste? Oder ist es ein rein C99 nur?Ja, das Ergebnis ist das gleiche für beide.
Gibt es einige Fragen mit mehr Diskussionen hier, und eine mögliche dupliziert Frage hier.