English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Le variabili statiche sono le variabili che rimangono nella memoria durante l'esecuzione del programma, ossia la loro durata di vita è per l'intera durata dell'esecuzione del programma. A differenza delle variabili automatiche, che rimangono nella memoria solo durante l'esecuzione della funzione e vengono distrutte alla fine della funzione.
Le variabili statiche vengono memorizzate nel segmento dei dati della memoria. Il segmento dei dati è una parte dell'indirizzario virtuale del programma.
Tutte le variabili statiche che non sono esplicitamente inizializzate o inizializzate a zero vengono memorizzate nel segmento dei dati non inizializzati (noto anche come segmento BSS). A differenza di queste, le variabili statiche inizializzate vengono memorizzate nel segmento dei dati inizializzati.
Ecco un esempio:
static int x = 5; static int y; La variabile statica x è memorizzata nel segmento dei dati inizializzati e la variabile statica y è memorizzata nel segmento BSS (non inizializzato).
Ecco un esempio di programma che utilizza la variabile statica in C:
#include<stdio.h> int func() static int i = 4; i++; return i; } int main() printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); return 0; }
Ecco l'output del programma sopra menzionato:
5 6 7 8 9 10
Ora capiamo il programma sopra menzionato.
All'interno della funzionefunc()
Poiché i è una variabile statica inizializzata a 4, essa viene memorizzata nel segmento dei dati inizializzati. Poi i viene incrementato e il suo valore viene restituito. Ecco il segmento di codice per visualizzare questo:
int func() static int i = 4; i++; return i; }
All'interno della funzionemain()
La funzionefunc()
Eseguito 6 volte, restituisce il valore di i da stampare. Poiché i è una variabile statica, rimane nella memoria durante l'esecuzione del programma e fornisce un valore coerente. Ecco il segmento di codice per visualizzare questo:
printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func());