Here e Here ho trovato che le variabili nel blocco vengono creati quando l'esecuzione raggiunge quel blocco,Qual è la durata della variabile all'interno del blocco?
per dimostrare che provato questo:
int main()
{
{
char a;
printf("Address of a %d \n",&a);
}
char b;
printf("Address of b %d \n",&b);
}
Come previsto b stato creato per primo (perché blocco esterno è eseguito prima di inner) e quando l'esecuzione ha raggiunto il blocco interno è stato creato un. Output del codice precedente:
Address of a 2686766
Address of b 2686767
(provata su x86 (pila cresce verso il basso, in modo variabile con maggiore indirizzo è stato creato per primo)).
Ma che dire di questo ?:
int main()
{
{
char a;
printf("Address of a %d \n",&a);
} // I expected that variable a should be destroyed here
{
char b;
printf("Address of b %d \n",&b);
}
}
uscita:
Address of a 2686767
Address of b 2686766
mi aspettavo che un è stato distrutto a chiusura parentesi graffa del primo blocco di istruzioni, in modo da affrontare in cui un era situato ora in cima allo stack, e b dovrebbe essere creato qui, quindi nell'output sopra entrambi gli indirizzi dovrebbero essere uguali, ma non lo sono? Le variabili vengono distrutte alla fine del blocco? Se no, perché?
Comportamento indefinito per passare un 'char *' a 'printf ("% d ")'. Inoltre, gli indirizzi relativi di oggetti separati con durata di archiviazione automatica non sono specificati. Questo probabilmente dipende anche dalle impostazioni di ottimizzazione del compilatore. – EOF
Usa '% p' per stampare un puntatore in' printf'. – Chiel
Come hai compilato il tuo codice? Hai abilitato le ottimizzazioni? –