significa C alloca primo ricordo alla variabile 'a' e poi cosa mai v'è in quella posizione di memoria diventa valore 'a'? o qualcos'altro?
Corretto. Vale la pena ricordare che "l'allocazione" di variabili automatiche come int a
è praticamente inesistente, dal momento che tali variabili sono memorizzate nello stack o in un registro CPU. Per le variabili memorizzate nello stack, l'allocazione viene eseguita quando viene chiamata la funzione e si riduce ad un'istruzione che sposta il puntatore dello stack di uno scostamento fisso calcolato al momento della compilazione (la memoria combinata di tutte le variabili locali utilizzate dalla funzione, arrotondato al corretto allineamento).
Il valore iniziale delle variabili assegnate ai registri della CPU è il contenuto precedente del registro. A causa di questa differenza (registro contro memoria) a volte accade che i programmi che funzionano correttamente quando compilati senza ottimizzazione iniziano a rompersi quando compilati con l'ottimizzazione attivata. Le variabili non inizializzate, che in precedenza indicavano la posizione che era stata inizializzata a zero, ora contengono i valori degli usi precedenti dello stesso registro.
Leggi http: // markshroyer.it/2012/06/c-both-true-and-false/ –
Sebbene ciò non avvenga con questo codice specifico, se "int a;" viene dichiarato nell'ambito del file (al di fuori di qualsiasi funzione), sarà inizializzato con 0 automaticamente. – teppic
@teppic: 'static int a;' verrà automaticamente inizializzato a zero indipendentemente dal suo ambito. – Destructor