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.
Wenn Sie Skalartypen initialisieren, wird der Wert der assignment-expression Variablen zugewiesen. Die Konvertierungsregeln für die Zuordnung gelten. (Informationen zu Konvertierungsregeln finden Sie unter Typkonvertierungen .)
Syntax
declaration:
declaration-specifiers
init-declarator-list
optieren;
declaration-specifiers:
storage-class-specifier
declaration-specifiers
optieren
type-specifier
declaration-specifiers
optieren
type-qualifier
declaration-specifiers
optieren
init-declarator-list:
init-declarator
init-declarator-list
,
init-declarator
init-declarator:
declarator
declarator
=
initializer /* Für skalare Initialisierung */
initializer:
assignment-expression
Sie können Variablen eines beliebigen Typs initialisieren, solange Sie den folgenden Regeln folgen:
Variablen, die auf Dateiebene deklariert sind, können initialisiert werden. Wenn Sie eine Variable auf externer Ebene nicht explizit initialisieren, wird sie standardmäßig auf 0 initialisiert.
Ein konstanter Ausdruck kann verwendet werden, um eine beliebige globale Variable zu initialisieren, die mit der
staticstorage-class-specifier. Variablen, die deklariert werden sollen, werdenstaticinitialisiert, wenn die Programmausführung beginnt. Wenn Sie eine globalestaticVariable nicht explizit initialisieren, wird sie standardmäßig auf 0 initialisiert, und jedem Element mit Zeigertyp wird ein NULL-Zeiger zugewiesen.Variablen, die mit dem
autoBezeichner der Speicherklasseregisterdeklariert werden, werden jedes Mal initialisiert, wenn das Ausführungssteuerelement an den Block übergeben wird, in dem sie deklariert werden. Wenn Sie einen Initialisierer aus der Deklaration einerautooderregisterVariablen weglassen, ist der Anfangswert der Variablen nicht definiert. Bei automatischen Und Registrieren von Werten ist der Initialisierer nicht darauf beschränkt, eine Konstante zu sein. Es kann sich um einen beliebigen Ausdruck handeln, der zuvor definierte Werte umfasst, sogar Funktionsaufrufe.Die Anfangswerte für externe Variablendeklarationen und für alle
staticVariablen, ob extern oder intern, müssen Konstantenausdrücke sein. Weitere Informationen finden Sie unter Konstantenausdrücke. Da die Adresse einer extern deklarierten oder statischen Variablen konstant ist, kann sie verwendet werden, um eine intern deklariertestaticZeigervariable zu initialisieren. Die Adresse einerautoVariablen kann jedoch nicht als statischer Initialisierer verwendet werden, da sie für jede Ausführung des Blocks unterschiedlich sein kann. Sie können konstanten oder variablen Werte zum InitialisierenautoundregisterVariablen verwenden.Wenn die Deklaration eines Bezeichners den Blockbereich aufweist und der Bezeichner über eine externe Verknüpfung verfügt, kann die Deklaration keine Initialisierung aufweisen.
Beispiele
Die folgenden Beispiele veranschaulichen Initialisierungen:
int x = 10;
Die Ganzzahlvariable x wird für den Konstantenausdruck 10initialisiert.
register int *px = 0;
Der Zeiger px wird auf 0 initialisiert und erzeugt einen "null"-Zeiger.
const int c = (3 * 1024);
In diesem Beispiel wird ein Konstantenausdruck (3 * 1024) verwendet, um einen Konstantenwert zu initialisieren c , der aufgrund des const Schlüsselworts nicht geändert werden kann.
int *b = &x;
Diese Anweisung initialisiert den Zeiger b mit der Adresse einer anderen Variablen. x
int *const a = &z;
Der Zeiger a wird mit der Adresse einer Variablen mit dem Namen zinitialisiert. Da es sich jedoch um eine constVariable angegeben hat, kann die Variable a nur initialisiert werden, nie geändert werden. Sie verweist immer auf die gleiche Position.
int GLOBAL ;
int function( void )
{
int LOCAL ;
static int *lp = &LOCAL; /* Illegal initialization */
static int *gp = &GLOBAL; /* Legal initialization */
register int *rp = &LOCAL; /* Legal initialization */
}
Die globale Variable GLOBAL wird auf externer Ebene deklariert, sodass sie die globale Lebensdauer hat. Die lokale Variable LOCAL verfügt über auto eine Speicherklasse und nur eine Adresse während der Ausführung der Funktion, in der sie deklariert wird. Daher ist der Versuch, die static Zeigervariable lp mit der Adresse zu LOCAL initialisieren, nicht zulässig. Die static Zeigervariable gp kann an die Adresse GLOBAL initialisiert werden, da diese Adresse immer identisch ist. Ebenso kann initialisiert werden, *rp da es sich um rp eine lokale Variable handelt und einen nicht konstanten Initialisierer aufweisen kann. Jedes Mal, wenn der Block eingegeben wird, LOCAL hat eine neue Adresse, die dann zugewiesen rpwird.