Cos'è la classe di archiviazione in C?
Una classe di archiviazione rappresenta la visibilità e una posizione di una variabile. Indica da quale parte di codice possiamo accedere a una variabile. Una classe di archiviazione in C viene utilizzata per descrivere le seguenti cose:
- L'ambito variabile.
- La posizione in cui verrà archiviata la variabile.
- Il valore inizializzato di una variabile.
- Una vita di una variabile.
- Chi può accedere a una variabile?
Pertanto una classe di archiviazione viene utilizzata per rappresentare le informazioni su una variabile.
NOTA: una variabile non è solo associata a un tipo di dati, al suo valore, ma anche a una classe di archiviazione.
Esistono quattro tipi di classi di archiviazione standard. La tabella seguente rappresenta le classi di archiviazione in C.
Classe di archiviazione | Scopo |
auto | È una classe di archiviazione predefinita. |
esterno | È una variabile globale. |
statico | È una variabile locale che è in grado di restituire un valore anche quando il controllo viene trasferito alla chiamata di funzione. |
Registrati | È una variabile che viene memorizzata all'interno di un registro. |
In questo tutorial C, imparerai diversi tipi di classi di archiviazione in C con esempi-
- Classe di archiviazione automatica in C
- Classe di archiviazione esterna in C
- Primo file: main.c
- Secondo file: originale.c
- Classe di archiviazione statica in C
- Registrare la classe di archiviazione in C
Classe di archiviazione automatica in C
Le variabili definite utilizzando la classe di memorizzazione automatica vengono chiamate come variabili locali. Auto sta per classe di archiviazione automatica. Una variabile è nella classe di archiviazione automatica per impostazione predefinita se non è specificata esplicitamente.
L'ambito di una variabile automatica è limitato solo al blocco particolare. Una volta che il controllo esce dal blocco, l'accesso viene distrutto. Ciò significa che solo il blocco in cui è dichiarata la variabile auto può accedervi.
Una parola chiave auto viene utilizzata per definire una classe di archiviazione automatica. Per impostazione predefinita, una variabile automatica contiene un valore garbage.
Example, auto int age;
Il programma seguente definisce una funzione con ha due variabili locali
int add(void) {int a=13;auto int b=48;return a+b;}
Prendiamo un altro programma che mostra il livello di visibilità "livello di visibilità" per le variabili automatiche in ogni codice di blocco che sono indipendenti l'una dall'altra:
#includeint main( ){auto int j = 1;{auto int j= 2;{auto int j = 3;printf ( " %d ", j);}printf ( "\t %d ",j);}printf( "%d\n", j);}
PRODUZIONE:
3 2 1
Classe di archiviazione esterna in C
Extern sta per classe di archiviazione esterna. La classe di archiviazione esterna viene utilizzata quando abbiamo funzioni o variabili globali condivise tra due o più file.
La parola chiave extern viene utilizzata per dichiarare una variabile o una funzione globale in un altro file per fornire il riferimento della variabile o della funzione che sono già state definite nel file originale.
Le variabili definite utilizzando una parola chiave extern vengono chiamate come variabili globali. Queste variabili sono accessibili in tutto il programma. Notare che la variabile extern non può essere inizializzata perché è già stata definita nel file originale.
Example, extern void display();
Primo file: main.c
#includeextern i;main() {printf("value of the external integer is = %d\n", i);return 0;}
Secondo file: originale.c
#includei=48;
Risultato:
value of the external integer is = 48
Per compilare ed eseguire il codice precedente, seguire i passaggi seguenti
Passaggio 1) Crea nuovo progetto,
- Seleziona Applicazione console
- Fare clic su Vai
Passaggio 2) Selezionare C e fare clic su Avanti
Passaggio 3) Fare clic su Avanti
Passaggio 4) Immettere i dettagli e fare clic su Avanti
Passaggio 5) Fare clic su Fine
Passaggio 6) Metti il codice principale come mostrato nel programma precedente nel file main.c e salvalo
Passaggio 7) Creare un nuovo file C [File -> nuovo -> File vuoto, salvarlo (come originale.c) e aggiungerlo al progetto corrente facendo clic su "OK" nella finestra di dialogo.
Passaggio 8) Inserisci e salva il codice C del file original.c mostrato nell'esempio precedente senza la funzione main ().
Passaggio 9) Crea ed esegui il tuo progetto. Il risultato è mostrato nella figura successiva
Classe di archiviazione statica in C
Le variabili statiche vengono utilizzate all'interno della funzione / file come variabili statiche locali. Possono anche essere usati come variabili globali
- La variabile locale statica è una variabile locale che conserva e memorizza il proprio valore tra le chiamate di funzione o il blocco e rimane visibile solo alla funzione o al blocco in cui è definita.
- Le variabili globali statiche sono variabili globali visibili solo al file in cui sono dichiarate.
Example: static int count = 10;
Tieni presente che la variabile statica ha un valore iniziale predefinito zero e viene inizializzata solo una volta nella sua vita.
#include/* function declaration */void next(void);static int counter = 7; /* global variable */main() {while(counter<10) {next();counter++; }return 0;}void next( void ) { /* function definition */static int iteration = 13; /* local static variable */iteration ++;printf("iteration=%d and counter= %d\n", iteration, counter);}
Risultato:
iteration=14 and counter= 7iteration=15 and counter= 8iteration=16 and counter= 9
Le variabili globali sono accessibili in tutto il file mentre le variabili statiche sono accessibili solo per la parte particolare di un codice.
La durata di una variabile statica è nell'intero codice del programma. Una variabile dichiarata o inizializzata utilizzando la parola chiave statica contiene sempre zero come valore predefinito.
Registrare la classe di archiviazione in C
È possibile utilizzare la classe di memorizzazione dei registri quando si desidera memorizzare le variabili locali all'interno di funzioni o blocchi nei registri della CPU invece che nella RAM per avere un accesso rapido a queste variabili. Ad esempio, i "contatori" sono un buon candidato per essere memorizzati nel registro.
Example: register int age;
La parola chiave register viene utilizzata per dichiarare una classe di archiviazione del registro. Le variabili dichiarate utilizzando la classe di archiviazione dei registri hanno una durata di vita in tutto il programma.
È simile alla classe di archiviazione automatica. La variabile è limitata al blocco particolare. L'unica differenza è che le variabili dichiarate utilizzando la classe di archiviazione dei registri sono memorizzate all'interno dei registri della CPU invece che in una memoria. Il registro ha un accesso più veloce di quello della memoria principale.
Le variabili dichiarate utilizzando la classe di archiviazione del registro non hanno un valore predefinito. Queste variabili sono spesso dichiarate all'inizio di un programma.
#include/* function declaration */main() {{register int weight;int *ptr=&weight ;/*it produces an error when the compilation occurs ,we cannot get a memory location when dealing with CPU register*/}}
PRODUZIONE:
error: address of register variable 'weight' requested
La tabella successiva riassume le caratteristiche principali di ciascuna classe di archiviazione comunemente utilizzate nella programmazione C.
Classe di archiviazione | Dichiarazione | Conservazione | Valore iniziale predefinito | Scopo | Tutta la vita |
auto | All'interno di una funzione / blocco | Memoria | Imprevedibile | All'interno della funzione / blocco | All'interno della funzione / blocco |
Registrati | All'interno di una funzione / blocco | Registri CPU | Spazzatura | All'interno della funzione / blocco | All'interno della funzione / blocco |
esterno | Fuori da tutte le funzioni | Memoria | Zero | Intero il file e altri file in cui la variabile è dichiarata come extern | runtime del programma |
Statico (locale) | All'interno di una funzione / blocco | Memoria | Zero | All'interno della funzione / blocco | runtime del programma |
Statico (globale) | Fuori da tutte le funzioni | Memoria | Zero | Globale | runtime del programma |
Sommario
In questo tutorial abbiamo discusso le classi di archiviazione in C, per riassumere:
- Una classe di archiviazione in C viene utilizzata per rappresentare informazioni aggiuntive su una variabile.
- La classe di archiviazione rappresenta l'ambito e la durata di una variabile.
- Indica anche chi può accedere a una variabile e da dove?
- Auto, extern, register, static sono le quattro diverse classi di archiviazione in un programma C.
- Un identificatore di classe di archiviazione in linguaggio C viene utilizzato per definire variabili, funzioni e parametri.
- auto viene utilizzato per una variabile locale definita all'interno di un blocco o di una funzione
- register viene utilizzato per memorizzare la variabile nei registri della CPU piuttosto che nella posizione di memoria per un accesso rapido.
- Statico viene utilizzato sia per le variabili globali che per quelle locali. Ognuno ha il suo caso d'uso all'interno di un programma C.
- Extern viene utilizzato per la condivisione dei dati tra i file di progetto C.