Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein „ganzer“ - Typ ist eine Struktur, Union oder einen Arraytyp.Wenn ein ganzer Typ Member eines gesamten Typen enthält, gelten die Initialisierung rekursiv zu steuern.
Syntax
Initialisierer:
{ Initialisiererliste } /* für die gesamte Initialisierung *{ Initialisiererliste ,}
Initialisiererliste:
InitialisierungInitialisierungslisten und Initialisierung
Die Initialisiererliste ist eine Liste von durch Trennzeichen getrennten Initialisierer.Jeder Initialisierer in der Liste ist entweder ein konstanter Ausdruck oder eine Initialisiererliste.Daher können Initialisierungslisten geschachtelt werden.Dieses Formular dient zum Initialisieren der gesamten Member eines gesamten Typs, wie in den Beispielen in diesem Abschnitt.Wenn jedoch der Initialisierer für einen automatischen Bezeichner ein einzelner Ausdruck ist, muss dies kein konstanter Ausdruck sein. Er muss lediglich entsprechenden Typ für die Zuweisung zum Bezeichner verfügen.
Für jede Initialisiererliste den entsprechenden Membern der gesamten Variablen werden die Werte der konstanten Ausdrücken, in der Reihenfolge zugewiesen.
Wenn Initialisiererliste weniger Werten als ein ganzer Typ aufweist, werden die restlichen Member oder die Elemente des gesamten Typs mit 0 initialisiert.Der Anfangswert des automatischen Bezeichners nicht explizit initialisiert ist nicht definiert.Wenn Initialisiererliste mehr Werte als ein ganzer Typ aufweist, Ergebnisse eines Fehlers.Diese Regeln gelten für alle eingebetteten Initialisiererliste sowie auf das Aggregat als Ganzes.
Die Initialisierung einer Struktur ist ein Ausdruck vom gleichen Typ oder eine Liste von Initialisierungen für ihre Member, die in geschweifte Klammern () eingeschlossen werden.Unbenannte Bitfeldmember nicht initialisiert werden.
Wenn eine Union Initialisiererliste initialisiert wird, muss als einzelner konstanter Ausdruck sein.Dem ersten Member der Union der Wert des konstanten Ausdrucks zugewiesen wird.
Wenn ein Array unbekannte Größe verfügt, bestimmt die Anzahl der Initialisierungen die Größe des Arrays, und sein Typ ist abgeschlossen.Es gibt keine Möglichkeit, Wiederholung des Initialisierers in C anzugeben, oder ein Element mitten in einem Array zu initialisieren, ohne alle vorangehenden Werte auch bereitzustellen.Wenn Sie diesen Vorgang im Programm benötigen, schreiben Sie die Routine in Assemblersprache.
Beachten Sie, dass die Anzahl der Initialisierungen die Größe des Arrays festlegen können:
int x[ ] = { 0, 1, 2 }
Wenn Sie die Größe festlegen und die falsche Anzahl von Initialisierungen geben jedoch generiert der Compiler einen Fehler.
Microsoft-spezifisch
Die maximale Größe für ein Array wird durch size_tdefiniert.Definiert in der Headerdatei STDDEF.H, ist size_t mit dem Bereich unsigned int 0x00000000 zu 0x7CFFFFFF.
Microsoft ENDES bestimmten
Beispiele
In diesem Beispiel wird Initialisierer für ein Array an.
int P[4][3] =
{
{ 1, 1, 1 },
{ 2, 2, 2 },
{ 3, 3, 3,},
{ 4, 4, 4,},
};
Diese Anweisung deklariert P als eine vier-durch-drei Array und initialisiert die Elemente der ersten Zeile und 1, die Elemente der zweiten Zeile bis 2 usw. durch die vierte Zeile.Beachten Sie, dass die Initialisiererliste für den dritten und vierten Zeile Komma hinter dem letzten konstanten Ausdruck enthält.Die letzte Initialisiererliste ({4, 4, 4,},) gefolgt von einem Komma ist.Diese zusätzlichen Kommas sind zulässig, jedoch nicht erforderlich. konstante Ausdrücke, die nur Kommas voneinander getrennt und die Initialisiererliste separate, die von anderen, erforderlich sind.
Wenn ein ganzer Member keine eingebettete Initialisiererliste verfügt jedes Mitglied des Subaggregate einfach Werte werden in der Reihenfolge zugewiesen.Daher ist die Initialisierung im vorherigen Beispiel dem folgenden Code:
int P[4][3] =
{
1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4
};
Geschweifte Klammern können, um einzelne Initialisierer in der Liste angezeigt und können auch das Beispiel oben erklärt.
Wenn Sie eine komplette Variablen initialisieren, müssen Sie darauf achten, dass geschweiften Klammern und Initialisierungslisten ordnungsgemäß verwenden.Das folgende Beispiel veranschaulicht die Interpretation des Compilers von geschweiften Klammern ausführlicher beschrieben:
typedef struct
{
int n1, n2, n3;
} triplet;
triplet nlist[2][3] =
{
{ { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }, /* Row 1 */
{ { 10,11,12 }, { 13,14,15 }, { 16,17,18 } } /* Row 2 */
};
In diesem Beispiel wird nlist wie eine Drehung um 2 by-3 Array von Strukturen, jede Struktur deklariert, die drei Member verfügt.Zeile 1 der Initialisierung weist Werte in die erste Zeile der nlistwie folgt:
Die erste geschweifte Klammer auf Signale der Zeile 1 der Compiler, dass die Initialisierung des ersten gesamten Members von nlist (d. h. nlist[0]) beginnt.
Die zweite geschweifte Klammer gibt an, dass die Initialisierung des ersten gesamten Members von nlist[0] (d. h. die Struktur unter nlist[0][0]) beginnt.
Die erste rechte geschweifte Klammer beendet die Initialisierung der Struktur nlist[0][0]. folgenden die öffnende geschweifte Klammer nlist[0][1]der Initialisierung startet.
Der Prozess wird bis zum Ende der Zeile fortgesetzt, in der die schließende rechte geschweifte Klammer Initialisierung von nlist[0]beendet.
Zeile 2 weist der zweiten Zeile von Werten nlist auf ähnliche Weise zu.Beachten Sie, dass die äußere Gruppen von geschweiften Klammern, die die Initialisierung in den Zeilen 1 und 2 enthalten, erforderlich sind.Der folgende Meldung, der die äußeren Klammern wäre, keinen Fehler verursachen:
triplet nlist[2][3] = /* THIS CAUSES AN ERROR */
{
{ 1, 2, 3 },{ 4, 5, 6 },{ 7, 8, 9 }, /* Line 1 */
{ 10,11,12 },{ 13,14,15 },{ 16,17,18 } /* Line 2 */
};
In diesem ersten beginnt die Konstruktion geschweifte Klammer in Zeile 1 die Initialisierung eines nlist[0], die ein Array von drei Strukturen ist.Die drei Member der ersten Struktur die Werte 1, 2 und 3 zugewiesen wurden.Wenn die nächste rechte geschweifte Klammer gefunden wird (nach dem Wert 3 (null) ist, nlist[0] der Initialisierung abgeschlossen, und die beiden Strukturen im restlichen drei Struktur Array werden automatisch mit 0 initialisiert.Entsprechend initialisiert { 4,5,6 } die erste Struktur in der zweiten Zeile aus nlist.Die verbleibenden zwei Strukturen von nlist[1] werden auf 0 festgelegt.Wenn der Compiler die folgenden Initialisiererliste ({ 7,8,9 }) auftritt, versucht er, nlist[2]zu initialisieren.Da nlist nur zwei Zeilen verfügt, bewirkt dieses Versuchs einen Fehler.
In dem folgenden Beispiel werden die drei int-Member von x auf 1, 2 bzw. 3 erzeugt initialisiert.
struct list
{
int i, j, k;
float m[2][3];
} x = {
1,
2,
3,
{4.0, 4.0, 4.0}
};
In der list Struktur nach oben, werden die drei Elemente in der ersten Zeile von m mit 4.0 initialisiert. die Elemente der verbleibenden Zeilen mit m werden standardmäßig auf 0.0 (null) initialisiert.
union
{
char x[2][3];
int i, j, k;
} y = { {
{'1'},
{'4'}
}
};
Die Union die Variable y, in diesem Beispiel wird initialisiert.Das erste Element von Union ist ein Array, weshalb der Initialisierung ein ganzer Initialisierung.Die Initialisiererliste {'1'} weist Werte zur ersten Zeile des Arrays.Da nur ein Wert in der Liste enthalten ist, wird das Element in der ersten Spalte in Zeichen 1initialisiert, und die verbleibenden zwei Elemente in der Zeile den Wert 0 werden standardmäßig initialisiert.Ebenso wird das erste Element der zweiten Zeile der zu signierenden x4initialisiert, und die verbleibenden zwei Elemente in der Zeile sind auf den Wert 0 (null) initialisiert.