Lagerklasser i C: Auto, Ekstern, Statisk, Register (Eksempler)

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 VENLIGST: En variabel er ikke kun forbundet med 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);}

PRODUKTION:

 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.

Søgeord ekstern bruges til at erklære en global variabel eller funktion i en anden fil for at give referencen til variabel eller funktion, som 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,

  1. Vælg Konsolapplikation
  2. Klik på Gå

Ekstern opbevaringsklasse i C

Trin 2) Vælg C og klik på Næste

Ekstern opbevaringsklasse i C

Trin 3) Klik på Næste

Ekstern opbevaringsklasse i C

Trin 4) Indtast detaljer, og klik på Næste

Ekstern opbevaringsklasse i C

Trin 5) Klik på Afslut

Ekstern opbevaringsklasse i C

Trin 6) Indsæt hovedkoden som vist i det forrige program i main.c-filen og gem den

Ekstern opbevaringsklasse i C

Trin 7) Opret en ny C-fil [File -> new -> Empty File , gem (som original.c) og tilføj den til det aktuelle projekt ved at klikke på "OK" i dialogboksen.

Ekstern opbevaringsklasse i C

Trin 8) Indsæt og gem C-koden for original.c-filen vist i det foregående eksempel uden main()-funktionen.

Ekstern opbevaringsklasse i C

Trin 9) Byg og kør dit projekt. Resultatet er vist i næste figur

Ekstern opbevaringsklasse i C

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 er synlige kun til den fil, hvori den 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 erklære en registerlagerklasse. Variablerne, der er erklæret ved hjælp af registerlagringsklasse, har 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*/}
}

PRODUKTION:

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

Resumé

I denne tutorial har vi diskuteret opbevaringsklasser i C for at opsummere:

  • En lagerklasse i C bruges til at repræsentere yderligere information om en variabel.
  • Lagerklasse repræsenterer omfanget og levetiden for en variabel.
  • Det fortæller også, hvem der kan få adgang til en variabel, og hvorfra?
  • Auto, ekstern, register, statisk er de fire forskellige lagerklasser i et C-program.
  • En lagringsklassespecifikator i C-sprog bruges til at definere variabler, funktioner og parametre.
  • auto bruges til en lokal variabel defineret i en blok eller funktion
  • register bruges til at gemme variablen i CPU-registre i stedet for hukommelsesplacering for hurtig adgang.
  • Statisk bruges til både globale og lokale variable. Hver enkelt har sin use case i et C-program.
  • Extern bruges til datadeling mellem C-projektfiler.