HOWTO · C
Variabile statica in C
Questo articolo introduce come utilizzare la variabile statica in C
In questa pagina
Questo articolo illustrerà più metodi su come utilizzare le variabili statiche in C.
Usa la variabile static per preservare il valore tra le chiamate di funzione in C
La parola chiave static viene utilizzata in più contesti, uno di questi è dichiarare la variabile che mantiene il suo valore in memoria tra le chiamate di funzione. Questo tipo di variabile ha una durata di archiviazione statica.
Nell’esempio seguente, dichiariamo una variabile k in un ambito di blocco funzione. Quando il flusso di controllo esce dalla funzione su, il valore di k permane in memoria fino all’uscita del programma. Questo comportamento può essere utilizzato per memorizzare gli oggetti dati in modo persistente durante l’esecuzione del programma.
Nota che le variabili statiche vengono inizializzate automaticamente a 0 se non le inizializziamo esplicitamente.
#include <stdio.h>
#include <stdlib.h>
static int j = 0;
void up(void) {
static int k = 0;
j++;
k++;
printf(" up() called. k=%2d, j=%2d\n", k, j);
}
int main() {
int i;
for (i = 0; i < 3; i++) up();
exit(EXIT_SUCCESS);
}
Produzione:
up() called. k= 1, j= 1
up() called. k= 2, j= 2
up() called. k= 3, j= 3
Usa la parola chiave static per dichiarare la variabile all’interno dell’ambito del file in C
Le variabili qualificate static possono essere dichiarate al di fuori di qualsiasi funzione, rendendole visibili all’interno dell’ambito del singolo file sorgente. Tali variabili sono chiamate variabili statiche con collegamento interno, il che significa che i loro valori possono essere utilizzati solo dalla funzione nello stesso file.
Si noti che entrambe le funzioni hanno la variabile locale denominata k inizializzata a zero, ma quando viene chiamata la funzione down, la variabile k (dichiarata in up) non è nello stesso ambito, e ne viene creata una nuova inizializzato in una diversa posizione di memoria. Pertanto, il valore negativo viene visualizzato dopo due iterazioni. Nota che i parametri della funzione non possono avere un qualificatore static.
#include <stdio.h>
#include <stdlib.h>
static int j = 0;
void up(void) {
static int k = 0;
j++;
k++;
printf(" up() called. k=%2d, j=%2d\n", k, j);
}
void down(void) {
static int k = 0;
j--;
k--;
printf("down() called. k=%2d, j=%2d\n", k, j);
}
int main() {
int i;
for (i = 0; i < 3; i++) up();
for (i = 0; i < 2; i++) down();
exit(EXIT_SUCCESS);
}
Produzione:
up() called. k= 1, j= 1
up() called. k= 2, j= 2
up() called. k= 3, j= 3
down() called. k=-1, j= 2
down() called. k=-2, j= 1