Le variabili statiche hanno la proprietà di preservare il loro valore anche dopo che sono fuori dal loro ambito! Pertanto, una variabile statica conserva il suo valore precedente nel suo ambito precedente e non viene inizializzata nuovamente nel nuovo ambito.
Sintassi:
static data_type var_name = var_value;>
Di seguito sono riportati alcuni fatti interessanti sulle variabili statiche in C:
parametro nello script di shell
1) Una variabile int statica rimane in memoria mentre il programma è in esecuzione. Una variabile normale o automatica viene distrutta al termine della chiamata di funzione in cui è stata dichiarata la variabile.
Ad esempio, possiamo utilizzare static int per contare il numero di volte in cui viene chiamata una funzione, ma una variabile auto non può essere utilizzata per questo scopo.
Esempio
C
// C Program to illustrate the static variable lifetime> #include> // function with static variable> int> fun()> {> >static> int> count = 0;> >count++;> >return> count;> }> int> main()> {> >printf>(>'%d '>, fun());> >printf>(>'%d '>, fun());> >return> 0;> }> |
>
>Produzione
1 2>
Il programma sopra stampa 1 2 perché le variabili statiche vengono inizializzate solo una volta e vivono fino alla fine del programma. Ecco perché possono mantenere il loro valore tra più chiamate di funzione.
Proviamo lo stesso codice per la variabile auto locale.
Esempio
modem contro router
C
// C Program to illustrate local auto variable in comparison> // of static variable.> #include> // Function> int> fun()> {> >int> count = 0;> >count++;> >return> count;> }> // Driver Code> int> main()> {> >printf>(>'%d '>, fun());> >printf>(>'%d '>, fun());> >return> 0;> }> |
apprendimento automatico e tipi
>
>Produzione
1 1>
2) Alle variabili statiche viene allocata memoria nel segmento dati, non nel segmento dello stack. Vedi il disposizione della memoria dei programmi C per dettagli.
3) Le variabili statiche (come le variabili globali) vengono inizializzate come 0 se non inizializzate esplicitamente. Ad esempio, nel programma seguente, il valore di x viene stampato come 0, mentre il valore di y è qualcosa di spazzatura. Vedere Questo per ulteriori dettagli.
Esempio
C
// C program to illustrate the default value of static> // variables> #include> int> main()> {> >static> int> x;> >int> y;> >printf>(>'%d
%d'>, x, y);> }> |
>
>
Produzione
0 [some_garbage_value]>
4) In C, le variabili statiche possono essere inizializzate solo utilizzando costanti letterali. Ad esempio, il seguente programma non riesce nella compilazione. Vedere Questo per ulteriori dettagli.
Esempio
C
come ordinare l'arraylist in Java
dormire in Javascript
#include> int> initializer(>void>)> {> >return> 50;> }> > int> main()> {> >static> int> i = initializer();> >printf>(>' value of i = %d'>, i);> >getchar>();> >return> 0;> }> |
>
>
Produzione
In function 'main': 9:5: error: initializer element is not constant static int i = initializer(); ^>
Nota: Tieni presente che questa condizione non è valida in C++. Quindi, se salvi il programma come programma C++, verrà compilato e eseguito correttamente.
5) In C/C++ sono possibili anche variabili globali e funzioni statiche. Lo scopo di questi è limitare l'ambito di una variabile o funzione a un file. Per favore riferisci a Funzioni statiche in C per ulteriori dettagli.
6) Le variabili statiche non dovrebbero essere dichiarate all'interno di una struttura. Il motivo è che il compilatore C richiede che gli interi elementi della struttura siano posizionati insieme (ovvero) l'allocazione di memoria per i membri della struttura dovrebbe essere contigua. È possibile dichiarare la struttura all'interno della funzione (segmento stack) o allocare memoria dinamicamente (segmento heap) oppure può essere anche globale (BSS o segmento dati). Qualunque sia il caso, tutti i membri della struttura dovrebbero risiedere nello stesso segmento di memoria perché il valore per l'elemento della struttura viene recuperato contando l'offset dell'elemento dall'indirizzo iniziale della struttura. Separare un solo membro in un segmento dati vanifica lo scopo della struttura ed è possibile avere un'intera struttura statica.
Articoli Correlati:
- Parola chiave statica in C++
- Quiz sulle parole chiave statiche
- Membri dati statici in C++
- Quando vengono distrutti gli oggetti statici?
- Fatti interessanti sulle funzioni membro statiche
- Le funzioni statiche possono essere virtuali?
- Confronto di parole chiave statiche in C++ e Java
- Funzioni statiche in C