statico {tipo di dati} {nome variabile}
Variabili locali statiche
Quando una variabile in una funzione è statica, la variabile conserva il suo valore tra le chiamate di funzione.
//Esempio1.c
#includere
intdivertimento1()
{
intcontare=0;
contare++;
Restituzionecontare;
}
intdivertimento2()
{
statico intcontare=0;
contare++;
Restituzionecontare;
}
intprincipale()
{
printf ('fun1 1a chiamata ritorna: %d ',divertimento1());
printf ('fun1 2a chiamata restituisce: %d ',divertimento1());
printf ('fun2 1a chiamata ritorna: %d ',divertimento2());
printf ('fun2 2a chiamata restituisce: %d ',divertimento2());
Restituzione 0;
}
Nell'Esempio 1.c abbiamo due funzioni: divertimento1() e divertimento2() . In divertimento1() , dichiariamo una variabile (count) e la inizializziamo a 0. Quindi, incrementiamo la variabile count e restituiamo il valore risultante. Usando principale() , Noi chiamiamo divertimento1() due volte, e ogni volta, viene restituito il valore 1 perché la variabile count viene azzerata quando la chiamata a divertimento1() è completato. In divertimento2() abbiamo dichiarato la variabile count come variabile statica. Pertanto, il suo valore è preservato. Usando principale() , Noi chiamiamo divertimento2() due volte: la prima volta viene restituito il valore 1 e la seconda viene restituito il valore 2.
Variabili globali statiche
Una variabile globale statica si comporta allo stesso modo delle altre variabili globali, ma non è possibile accedervi da un altro programma C.
Funzioni statiche
In C, le funzioni sono globali per impostazione predefinita. Tuttavia, se dichiariamo una funzione statica, allora la funzione è locale e non è possibile accedervi da un altro programma C.
Inizializzazione di variabili statiche
Se una variabile statica non è inizializzata in modo esplicito, viene inizializzata come 0.
//Esempio2.c
#includere
intprincipale()
{
statico intio;
printf ('Valore di i: %d ',io);
Restituzione 0;
}
In Esempio2.c, abbiamo dichiarato una variabile statica i che non è inizializzata. Tuttavia, poiché la variabile è statica, viene inizializzata automaticamente su 0.
È importante notare che una variabile statica deve essere inizializzata da un letterale costante; non possiamo usare il valore di ritorno di una funzione per inizializzare una variabile statica.
//Esempio3.c#includere
intdivertimento1()
{
Restituzione 5;
}
intprincipale()
{
statico intio=divertimento1();
printf ('Valore di i: %d ',io);
Restituzione 0;
}
Nell'Esempio3.c, proviamo a inizializzare una variabile statica utilizzando il valore restituito di divertimento1() . Tuttavia, come puoi vedere, viene restituito un errore quando il codice viene compilato.
Riepilogo
La durata di una variabile statica e la durata del programma sono uguali.
Se una variabile statica non è inizializzata, assumerà un valore predefinito di 0.
Né una variabile statica globale né una funzione statica sono accessibili da un programma diverso da quello in cui è stata definita.