Lagerklasser i C: Auto, Ekstern, Statisk, Register (Eksempler)
⚡ Smart opsummering
Lagringsklasser i C definerer omfanget, levetiden, standardværdien og hukommelsesplaceringen for hver variabel ved hjælp af fire specifikationer - auto, register, static og extern - til at kontrollere, hvor data findes, og hvor længe de overlever under udførelsen.
Hvad er opbevaringsklasse i C?
En lagerklasse repræsenterer synligheden og en placering af en variabel. Den fortæller fra hvilken del af koden vi kan få adgang til en variabel. En lagerklasse i C bruges til at beskrive følgende ting:
- Det variable omfang.
- Det sted, hvor variablen vil blive gemt.
- Den initialiserede værdi af en variabel.
- En variabels levetid.
- Hvem kan få adgang til en variabel?
En lagerklasse bruges således til at repræsentere informationen om en variabel.
BEMÆRK: En variabel er ikke kun knyttet til en datatype, dens værdi, men også en opbevaringsklasse.
Hvad er typerne af opbevaringsklasser i C?
Der er i alt fire typer standardopbevaringsklasser. Tabellen nedenfor repræsenterer lagerklasserne i C.
| Opbevaringsklasse | Formål |
| auto | Det er en standard opbevaringsklasse. |
| ekstern | Det er en global variabel. |
| statisk | Det er en lokal variabel, som er i stand til at returnere en værdi, selv når kontrol overføres til funktionskaldet. |
| register | Det er en variabel, som er gemt i et register. |
Autoopbevaringsklasse i C
De variabler, der er defineret ved hjælp af autolagringsklassen, kaldes lokale variabler. Auto står for automatisk opbevaringsklasse. En variabel er som standard i autolagringsklassen, hvis den ikke er eksplicit angivet.
Omfanget af en autovariabel er kun begrænset med den bestemte blok. Når kontrollen går ud af blokken, er adgangen ødelagt. Dette betyder, at kun den blok, hvori den automatiske variabel er erklæret, kan få adgang til den.
Et nøgleord auto bruges til at definere en autolagringsklasse. Som standard indeholder en automatisk variabel en skraldværdi.
Example, auto int age;
Programmet nedenfor definerer en funktion med to lokale variabler
int add(void) { int a=13; auto int b=48; return a+b;}
Vi tager et andet program, som viser omfangsniveauet "synlighedsniveau" for autovariabler i hver blokkode, som er uafhængige af hinanden:
#include <stdio.h> int main( ) { auto int j = 1; { auto int j= 2; { auto int j = 3; printf ( " %d ", j); } printf ( "\t %d ",j); } printf( "%d\n", j);}
Output:
3 2 1
Ekstern opbevaringsklasse i C
Extern står for ekstern opbevaringsklasse. Ekstern lagerklasse bruges, når vi har globale funktioner eller variabler, som deles mellem to eller flere filer.
Nøgleordet extern bruges til at deklarere en global variabel eller funktion i en anden fil for at angive referencen til en variabel eller funktion, der allerede er defineret i den originale fil.
Variablerne defineret ved hjælp af et eksternt nøgleord kaldes globale variabler. Disse variabler er tilgængelige i hele programmet. Bemærk, at den eksterne variabel ikke kan initialiseres, den er allerede defineret i den originale fil.
Example, extern void display();
Første fil: main.c
#include <stdio.h> extern i; main() { printf("value of the external integer is = %d\n", i); return 0;}
Anden fil: original.c
#include <stdio.h>
i=48;
Resultat:
value of the external integer is = 48
Følg nedenstående trin for at kompilere og køre ovenstående kode
Trin 1) Opret nyt projekt,
- Vælg Konsolapplikation
- Klik på Gå
Trin 2) Vælg C og klik på Næste
Trin 3) Klik på Næste
Trin 4) Indtast oplysningerne, og klik på Næste
Trin 5) Klik på Udfør
Trin 6) Indsæt hovedkoden som vist i det forrige program i main.c-filen og gem den.
Trin 7) Opret en ny C-fil [Fil -> ny -> Tom fil], gem den (som original.c) og tilføj den til det aktuelle projekt ved at klikke på “OK” i dialogboksen.
Trin 8) Indsæt og gem C-koden fra den originale .c-fil, der er vist i det foregående eksempel, uden main()-funktionen.
Trin 9) Byg og kør dit projekt. Resultatet vises i den næste figur.
Statisk opbevaringsklasse i C
De statiske variabler bruges i funktion/fil som lokale statiske variable. De kan også bruges som en global variabel
- Statisk lokal variabel er en lokal variabel, der bevarer og gemmer sin værdi mellem funktionskald eller blok og forbliver kun synlig for den funktion eller blok, hvori den er defineret.
- Statiske globale variabler er globale variabler, der kun er synlige for den fil, hvori de er deklareret.
Example: static int count = 10;
Husk, at den statiske variabel har en standard begyndelsesværdi nul og initialiseres kun én gang i sin levetid.
#include <stdio.h> /* 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);}
Resultat:
iteration=14 and counter= 7 iteration=15 and counter= 8 iteration=16 and counter= 9
Globale variabler er tilgængelige i hele filen, mens statiske variabler kun er tilgængelige for den bestemte del af en kode.
Levetiden for en statisk variabel er i hele programkoden. En variabel, som er erklæret eller initialiseret ved hjælp af statisk nøgleord, indeholder altid nul som standardværdi.
Registrer lagerklasse i C
Du kan bruge registerlagerklassen, når du vil gemme lokale variabler i funktioner eller blokke i CPU-registre i stedet for RAM at have hurtig adgang til disse variabler. For eksempel er "tællere" en god kandidat til at blive opbevaret i registret.
Example: register int age;
Nøgleordet register bruges til at deklarere en register storage-klasse. De variabler, der deklareres ved hjælp af register storage-klassen, har en levetid gennem hele programmet.
Det ligner autolagringsklassen. Variablen er begrænset til den pågældende blok. Den eneste forskel er, at de variabler, der er erklæret ved hjælp af registerlagerklasse, er gemt i CPU-registre i stedet for en hukommelse. Register har hurtigere adgang end hovedhukommelsen.
De variabler, der er erklæret ved hjælp af registerlagerklasse, har ingen standardværdi. Disse variable er ofte erklæret i begyndelsen af et program.
#include <stdio.h> /* 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*/} }
Output:
error: address of register variable 'weight' requested
Den næste tabel opsummerer de vigtigste træk ved hver lagerklasse, som er almindeligt anvendt i C-programmering
| Opbevaringsklasse | Erklæring | Opbevaring | Standard startværdi | Anvendelsesområde | Levetid |
| auto | Inde i en funktion/blok | Hukommelse | Uforudsigelige | Inden for funktionen/blokken | Inden for funktionen/blokken |
| register | Inde i en funktion/blok | CPU registre | Affald | Inden for funktionen/blokken | Inden for funktionen/blokken |
| ekstern | Udenfor alle funktioner | Hukommelse | Zero | Hele filen og andre filer, hvor variablen er erklæret som ekstern | programmets køretid |
| Statisk (lokal) | Inde i en funktion/blok | Hukommelse | Zero | Inden for funktionen/blokken | programmets køretid |
| Statisk (global) | Udenfor alle funktioner | Hukommelse | Zero | Global | programmets køretid |









