Inizializzare i tipi di valore

Durante l'inizializzazione dei tipi di scalare, il valore di espressione di assegnazione verrà assegnato alla variabile.le regole di conversione per l'assegnazione si applicano.(Vedere conversioni di tipi per informazioni sulle regole di conversione.)

Sintassi

  • declaration:
    init-dichiaratore-elenco di dichiarazione-identificatoriscegliere**;**

  • dichiarazione-identificatori:
    dichiarazione-identificatori dell'archiviazione-classe-identificatore scegliere

    dichiarazione-identificatori dell'tipo-identificatore scegliere

    dichiarazione-identificatori di tipo-qualificatore scegliere

  • init-dichiaratore-elenco:
    init-dichiaratore

    init-dichiaratore-elenco , init-dichiaratore

  • init-dichiaratore:
    dichiaratore

    dichiaratore = inizializzatore /* Per l'inizializzazione scalare */

  • inizializzatore:
    espressione di assegnazione

È possibile inizializzare le variabili di qualsiasi tipo, a condizione che obbedite le regole seguenti:

  • Le variabili dichiarate a livello di ambito file possono essere inizializzate.Se in modo esplicito non inizializza una variabile a livello esterno, viene inizializzato a 0 per impostazione predefinita.

  • Un'espressione costante può essere utilizzata per inizializzare una variabile globale dichiarata con statico archiviazione-classe-identificatore.Le variabili dichiarate a l statico vengono inizializzati quando l'esecuzione del programma viene avviato.Se in modo esplicito non inizializza un globale statico variabile, viene inizializzata a 0 per impostazione predefinita e ogni membro di tipo di puntatore viene assegnato un puntatore null.

  • variabili dichiarate con autoidentificatori o il registro l'identificatore di classe di archiviazione viene inizializzato ogni volta che il controllo di esecuzione passa al blocco nel quale sono dichiarate.Se si omette un inizializzatore dalla dichiarazione di un oggetto autoidentificatori o il registro la variabile, il valore iniziale della variabile è definita.Per automatico e registrare i valori, l'inizializzatore non è limitato a essere una costante; può essere qualsiasi espressione che include i valori precedentemente definiti, anche chiamate di funzione.

  • I valori iniziali per le dichiarazioni delle variabili esterne e per tutti statico le variabili, se esterno o interno, devono essere espressioni costanti.(Per ulteriori informazioni, vedere espressioni costanti). Poiché l'indirizzo della variabile esternamente dichiarata o statica qualsiasi oggetto è costante, può essere utilizzato per inizializzare internamente dichiarato statico variabile puntatore.Tuttavia, l'indirizzo di un oggetto autoidentificatori la variabile non può essere utilizzata come inizializzatore statico poiché può essere diverso per ogni esecuzione del blocco.È possibile utilizzare i valori costanti o variabili per l'inizializzazione autoidentificatori e il registro variabili.

  • Se la dichiarazione di un identificatore in ambito blocco e l'identificatore di collegamento esterno, la dichiarazione non può avere una inizializzazione.

Esempi

Negli esempi seguenti vengono illustrati le inizializzazioni:

int x = 10; 

la variabile Integer x viene inizializzato con l'espressione costante 10.

register int *px = 0;

il puntatore px viene inizializzato su 0, generando un puntatore “null„.

const int c = (3 * 1024);

In questo esempio viene utilizzata un'espressione costante (3 * 1024) per inizializzare c in un valore costante che non può essere modificato a causa di const parola chiave.

int *b = &x;

Questa istruzione inizializza il puntatore b con l'indirizzo di un'altra variabile, x.

int *const a = &z;

il puntatore a viene inizializzato con l'indirizzo di una variabile denominata z.Tuttavia, poiché viene specificata sia un oggetto const, la variabile a può essere inizializzato solo, non modifica mai.Sempre punta alla stessa posizione.

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   */
}

la variabile globale GLOBAL viene dichiarato a livello esterno, pertanto è durata complessiva.la variabile locale LOCAL ha autoidentificatori la classe di archiviazione e ha solo un indirizzo durante l'esecuzione della funzione in cui è dichiarata.Di conseguenza, il tentativo di inizializzare statico variabile puntatore lp con l'indirizzo di LOCAL non è consentito.statico variabile puntatore gp può essere inizializzato all'indirizzo di GLOBAL poiché tale indirizzo viene sempre lo stesso.Analogamente, *rp è possibile inizializzare perché rp è una variabile locale e può disporre di un inizializzatore non costante.Ogni volta che il blocco viene inserito, LOCAL dispone di un nuovo indirizzo, che viene quindi assegnato rp.

Vedere anche

Concetti

Inizializzazione