Heim >Backend-Entwicklung >C++ >Wie werden automatische Strukturen und Arrays in C und C teilweise initialisiert?

Wie werden automatische Strukturen und Arrays in C und C teilweise initialisiert?

DDD
DDDOriginal
2024-12-19 05:32:21202Durchsuche

How are Automatic Structures and Arrays Partially Initialized in C and C  ?

Partielle Initialisierung automatischer Strukturen und Arrays in C und C

Das GNU C-Referenzhandbuch besagt, dass, wenn eine Strukturvariable nicht initialisiert wird, die Werte seiner Mitglieder sind unbestimmt. Die Standards definieren jedoch keine Teilinitialisierung von Strukturen oder Arrays.

Terminologie der Teilinitialisierung

„Teilinitialisierung“ bezieht sich auf die Bereitstellung einiger, aber nicht aller Initialisierer für ein Aggregat (Array oder Struktur).

Initialisierungsregeln für automatische Strukturen und Arrays

Die C- und C-Standards legen die folgenden Regeln für die Initialisierung automatischer Strukturen und Arrays fest:

  • Wenn das Aggregat vollständig initialisiert ist (d. h. es sind genügend Initialisierer vorhanden für alle Elemente oder Mitglieder), den initialisierten Elementen/Mitgliedern werden die angegebenen Werte zugewiesen, während die übrigen Elemente/Mitglieder mit Null (für Integraltypen) oder NULL-initialisiert (für) initialisiert werden Zeigertypen).
  • Wenn das Aggregat nicht initialisiert ist, sind alle Elemente/Mitglieder unbestimmt.

Teilweises Initialisierungsverhalten

Auch wenn Die teilweise Initialisierung ist in den Standards nicht explizit definiert. Alle Mainstream-Compiler befolgen Folgendes Verhalten:

  • Wenn bei automatischen Arrays weniger Initialisierer vorhanden sind als die Größe des Arrays, werden die nicht initialisierten Elemente auf 0 initialisiert.
  • Bei automatischen Strukturen, wenn weniger Initialisierer vorhanden sind als die Anzahl der Strukturmitglieder ist, werden die nicht initialisierten Mitglieder wertinitialisiert. In C bedeutet dies, dass Klassendatenelemente standardmäßig initialisiert werden, während Nicht-Klassendatenelemente mit Null initialisiert werden.

Beispiel

Das folgende C Code initialisiert teilweise eine Struktur:

struct S {
    int a;
    char* b;
    int c;
};

S s = {1, "asdf"};

In diesem Beispiel wird s.a auf 1 initialisiert, s.b ist es auf „asdf“ initialisiert und s.c ist auf Null initialisiert, da es nicht explizit initialisiert wird.

Das obige ist der detaillierte Inhalt vonWie werden automatische Strukturen und Arrays in C und C teilweise initialisiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn