Initialisierung

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Deklarationssyntax - Index

Initialisierer setzen den Anfangswert, der in einem Objekt (Variable, Array, Struktur usw.) gespeichert wird. Wenn Sie ein Objekt von statischer Lebensdauer nicht initialisieren, wird es per Voreinstellung initialisiert:

  • Es wird auf 0 gesetzt, wenn es zu einem arithmetischen Typ gehört.
  • Es wird auf NULL gesetzt, wenn es ein Zeigertyp ist.

Hinweis: Hat das Objekt eine automatische Lebensdauer, ist sein Wert unbestimmt.

Syntax für Initialisierer

Initialisierer
		= Ausdruck
		= {Initialisierer-Liste} <,>}
		(Ausdrucksliste)
Initialisierer-Liste
		Ausdruck
		Initialisierer-Liste, Ausdruck
		{ Initialisierer-Liste} <,>}

Regeln für Initialisierer

  • Die Anzahl der Initialisierer in der Initialisierer-Liste darf nicht größer sein als die Anzahl der Objekte, die initialisiert werden sollen.
  • Nur Objekte (zum Beispiel ein Array) können initialisiert werden.
  • In C (aber nicht in C++) müssen alle Ausdrücke Konstanten sein, wenn sie auf einer der folgenden Positionen stehen:
    • In einer Initialisierung für ein Objekt mit statischer Lebensdauer.
    • In einer Initialisierer-Liste für ein Array, eine Struktur oder Variante (Ausdrücke mit sizeof sind ebenfalls erlaubt).
  • Wenn eine Deklaration für einen Bezeichner den Gültigkeitsbereich Block hat und der Bezeichner über externe oder interne Bindung verfügt, darf die Deklaration keinen Initialisierer für den Bezeichner haben.
  • Stehen in einer in geschweiften Klammern eingeschlossenen Liste weniger Initialisierer, als Member einer Struktur vorhanden sind, werden die übrigbleibenden Member implizit wie Objekte mit statischer Speicherdauer initialisiert.

Skalare Datentypen werden mit einem einzigen Ausdruck initialisiert, der optional in geschweiften Klammern stehen kann. Der Anfangswert des Objekts entspricht dem des Ausdrucks; in Bezug auf Typ und Umwandlung treffen dieselben Beschränkungen zu wie bei einfachen Zuweisungen.

Bei Varianten initialisiert ein in geschweiften Klammern stehender Initialisierer den Member, der als erster in der Liste der Variantendeklaration steht. Strukturen und Varianten von automatischen Speicherklassen erfordern einen der folgenden Initialisierer:

  • Eine Initialisierer-Liste (wie in Arrays, Strukturen und Varianten beschrieben).
  • Einen einfachen Ausdruck mit kompatiblem Varianten- oder Strukturtyp. In diesem Fall entspricht der Anfangswert des Objekts dem des Ausdrucks.

Arrays, Strukturen und Varianten

Sie können Arrays und Strukturen (zum Beispiel bei der Deklaration) mit einer in geschweiften Klammern stehenden Liste von Initialisierern für Member des in Frage kommenden Objekts initialisieren. Die Initialisierer werden in aufsteigender Reihenfolge der Array-Indizes oder Member angegeben. Varianten initialisieren Sie mit einem in geschweiften Klammern stehenden Initialisierer für den ersten Member der Variante. So können Sie zum Beispiel ein Array days deklarieren, das zählen soll, wie oft jeder Wochentag in einem Monat vorkommt (und dabei unterstellen, dass jeder Tag wenigstens einmal vorkommt):

int days[7] = { 1, 1, 1, 1, 1, 1, 1 }

Die folgenden Regeln gelten bei der Initialisierung von Zeichen und "Wide-Character"-Arrays:

  • Zeichen-Arrays können mit einem String-Literal (optional in geschweiften Klammern eingeschlossen) initialisiert werden. Jedes Zeichen des Strings (einschließlich der abschließenden Null) initialisiert nacheinander ein Element in dem Array. So können Sie zum Beispiel folgende Deklaration angeben:
char name[] = { "Unbekannt" };
In dieser Deklaration wird ein Array mit zehn Elementen definiert. Die Elemente sind 'U' (für name[0], 'n' (für name[1]) usw. (einschließlich einem Null-Begrenzer).
  • Sie können ein "Wide-Character"-Array (das kompatibel mit wchar_t ist) mit einem "wideString" initialisieren, der in geschweiften Klammern stehen kann. Wie bei Zeichen-Arrays initialisieren die Codes des "wideString"-Literals nacheinander die Elemente des Arrays.

Im Folgenden sehen Sie ein Beispiel für die Initialisierung einer Struktur:

struct mystruct {
   int i;
   char str[21];
   double d;
   } s = { 20, "Borland", 3.141 };

Komplexe Member einer Struktur, wie Arrays oder Strukturen, können mit entsprechenden Ausdrücken innerhalb geschachtelter geschweifter Klammern initialisiert werden.

Siehe auch