Initialisieren von Skalar-Typen
Wenn skalare Typen initialisiert wird, wird der Wert des Ausdrucks Zuweisung der Variablen zugewiesen.Die Konvertierungsregeln für die Zuweisung zu erfüllen.(Siehe Typkonvertierungen Informationen über Konvertierungsregeln.)
Syntax
declaration:
Spezifizierer deklariert INIT-Deklarator Listeopt**;**Spezifizierer deklariert:
Speicherklassenspezifizierer Deklaration Bezeichner optTypspezifizierer Deklaration Bezeichner opt
Spezifizierer Deklaration Qualifizierer TYPE opt
INIT-DeklaratorListe:
INITDeklaratorINIT-DeklaratorListe und INITDeklarator
INITDeklarator:
DeklaratorDeklaratoren = Initialisierer /* für skalare Initialisierung *
Initialisierer:
ZuweisungAusdruck
Sie können Variablen eines beliebigen Typs initialisieren, vorausgesetzt, dass Sie die folgenden Regeln einhalten:
Die Variablen, die in der Dateigültigkeitsbereichs Anwendungsebene deklariert werden, können erneut initialisiert werden.Wenn Sie nicht explizit eine Variable auf der externen Ebene initialisieren, wird sie standardmäßig auf 0 (null) initialisiert.
Ein konstanter Ausdruck kann verwendet werden, um eine globale Variable zu initialisieren, die mit dem static Speicherklassenspezifiziererdeklariert ist.Die zu deklarierenden Variablen, um static ist, werden initialisiert, wenn die Programmausführung gestartet wird.Wenn Sie nicht explizit eine globale statische Variablen initialisieren, wird sie standardmäßig auf 0 (null) initialisiert, und jeder Member, der Zeigertyp aufweist, wird ein NULL-Zeiger zugewiesen.
Variablen, die mit auto deklarierten oder Register Speicherklassenspezifizierer initialisiert werden, wenn das Execution Control Block übergeben wird, in dem sie deklariert werden.Wenn Sie eine Initialisierung von der Deklaration von auto oder Register-Variable weglassen, wird der Anfangswert der Variablen nicht definiert.Für automatisches, und registrieren Sie Werte, der Initialisierung wird nicht in den beschränkt sich eine Konstante. Es kann ein beliebiger Ausdruck sein, der bereits definierte Werte, Aufrufe der geraden Funktion enthält.
Die Anfangswerte für Externe Variablendeklarationen sowie für alle statischen Variablen, ob extern oder intern konstante Ausdrücke sein müssen.(Weitere Informationen finden Sie unter Konstante Ausdrücke). Da die Adresse eines deklarierten oder extern, die von statischen Variablen konstant ist, kann sie verwendet werden, um eine intern deklariert static Zeigervariable zu initialisieren.Allerdings kann die Adresse einer auto-Variable nicht als statischer Initialisierer verwendet werden, da sie für jede Ausführung des Blocks unterscheidet.Sie können entweder Konstante oder Variablenwerte verwenden, um auto und Register-Variablen initialisieren.
Wenn die Deklaration eines Bezeichners Blockbereich hat und der Bezeichner externe Bindung verfügt, kann die Deklaration einer Initialisierung nicht zulässig.
Beispiele
Die folgenden Beispiele veranschaulichen: Initialisierungen
int x = 10;
Die ganzzahlige Variable x wird dem konstanten Ausdruck 10initialisiert.
register int *px = 0;
Der Zeiger px wird mit 0 initialisiert und erzeugt einen „null“ - Zeiger.
const int c = (3 * 1024);
In diesem Beispiel wird ein konstanter Ausdruck (3 * 1024) , um c mit einem konstanten Wert zu initialisieren, die wegen des const-Schlüsselworts geändert werden kann.
int *b = &x;
Diese Anweisung initialisiert den Zeiger b die Adresse einer anderen Variablen, x.
int *const a = &z;
Der Zeiger a wird mit der Adresse einer Variablen initialisiert, die zbenannt ist.Da jedoch angegeben, um constist, kann nur a-Variable initialisiert werden und nie geändert.Es wird immer zum gleichen Speicherort.
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 der externen Ebene deklariert, sodass sie globale Lebensdauer.Die lokale Variable LOCAL hat auto Speicherklasse und verfügt über nur eine Adresse während der Ausführung der Funktion, in der sie deklariert wurde.Daher wird beim Versuch, die static Zeigervariable lp mit der Adresse der LOCAL zu initialisierenden nicht zulässig.Die static Zeigervariable gp kann auf die Adresse eines GLOBAL initialisiert werden, da diese Adresse noch immer identisch ist.Entsprechend kann *rp initialisiert werden, da rp eine lokale Variable ist keine Konstante und einen Initialisierer haben.Jedes Mal, wenn der Block eingegeben wird, hat LOCAL eine neue Adresse, rpdie dann zugewiesen wird.