Opbevaringsklasser i C: auto, ekstern, statisk, registerklasse i C

Indholdsfortegnelse:

Anonim

Hvad er opbevaringsklasse i C?

En lagerklasse repræsenterer synligheden og placeringen af ​​en variabel. Den fortæller fra hvilken del af koden vi kan få adgang til en variabel. En lagringsklasse i C bruges til at beskrive følgende ting:

  • Det variable omfang.
  • Det sted, hvor variablen gemmes.
  • Den initialiserede værdi af en variabel.
  • En levetid for en variabel.
  • Hvem har adgang til en variabel?

Således bruges en lagringsklasse til at repræsentere informationen om en variabel.

BEMÆRK: En variabel er ikke kun forbundet med en datatype, dens værdi, men også en lagringsklasse.

Der er i alt fire typer standardlagerklasser. Tabellen nedenfor repræsenterer lagringsklasser i C.

Opbevaringsklasse Formål
auto Det er en standardlagerklasse.
ekstern Det er en global variabel.
statisk Det er en lokal variabel, der er i stand til at returnere en værdi, selv når kontrol overføres til funktionsopkaldet.
Tilmeld Det er en variabel, der er gemt inde i et register.

I denne C-tutorial lærer du forskellige typer lagringsklasser i C med eksempler-

  • Auto Storage Class i C
  • Ekstern opbevaringsklasse i C
    • Første fil: main.c
    • Anden fil: original.c
  • Statisk opbevaringsklasse i C
  • Registrer lagerklasse i C

Auto Storage Class i C

Variablerne defineret ved hjælp af automatisk lagringsklasse kaldes lokale variabler. Auto står for automatisk lagringsklasse. En variabel er som standard i automatisk lagerklasse, hvis den ikke udtrykkeligt er angivet.

Omfanget af en automatisk variabel er kun begrænset med den bestemte blok. Når kontrollen går ud af blokken, ødelægges adgangen. Dette betyder, at kun den blok, hvori den automatiske variabel erklæres, kan få adgang til den.

Et nøgleord auto bruges til at definere en automatisk lagringsklasse. Som standard indeholder en automatisk variabel en skraldværdi.

Example, auto int age;

Programmet nedenfor definerer en funktion med har to lokale variabler

int add(void) {int a=13;auto int b=48;return a+b;}

Vi tager et andet program, der viser omfanget "synlighedsniveau" for automatiske variabler i hver blokkode, der er uafhængigt af hinanden:

#include 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 lagringsklasse. Ekstern lagringsklasse bruges, når vi har globale funktioner eller variabler, der deles mellem to eller flere filer.

Keyword ekstern bruges til at erklære en global variabel eller funktion i en anden fil for at give referencen for variablen eller funktionen, som allerede er defineret i den oprindelige fil.

De variabler, der er defineret ved hjælp af et eksternt nøgleord, kaldes som 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 extern i;main() {printf("value of the external integer is = %d\n", i);return 0;}

Anden fil: original.c

#include 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å Start

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

Trin 3) Klik på Næste

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

Trin 5) Klik på Udfør

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

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

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

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

Statisk opbevaringsklasse i C

De statiske variabler bruges inden for funktion / fil som lokale statiske variabler. De kan også bruges som en global variabel

  • Statisk lokal variabel er en lokal variabel, der bevarer og gemmer sin værdi mellem funktionsopkald eller blokering og kun er synlig for den funktion eller blok, som den er defineret i.
  • Statiske globale variabler er globale variabler, der kun er synlige for den fil, hvori de erklæres.
Example: static int count = 10;

Husk, at den statiske variabel har en standardindledningsværdi nul og initialiseres kun en gang i sin levetid.

#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);}

Resultat:

iteration=14 and counter= 7iteration=15 and counter= 8iteration=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, der erklæres eller initialiseres ved hjælp af statiske nøgleord, indeholder altid nul som standardværdi.

Registrer lagerklasse i C

Du kan bruge registerlagerklassen, når du vil gemme lokale variabler inden for funktioner eller blokke i CPU-registre i stedet for RAM for at få hurtig adgang til disse variabler. For eksempel er "tællere" en god kandidat til at blive gemt i registret.

Example: register int age;

Nøgleordet register bruges til at erklære et register storage class. De variabler, der er deklareret ved hjælp af registerlagerklassen, har levetid i hele programmet.

Det svarer til klassen automatisk lagring. Variablen er begrænset til den bestemte blok. Den eneste forskel er, at de variabler, der er erklæret ved hjælp af registerlagerklassen, lagres inde i CPU-registre i stedet for en hukommelse. Registret har hurtigere adgang end hovedhukommelsen.

Variablerne deklareret ved hjælp af registerlagerklassen har ingen standardværdi. Disse variabler erklæres ofte i starten af ​​et program.

#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*/}}

PRODUKTION:

error: address of register variable 'weight' requested

Den næste tabel opsummerer de vigtigste funktioner i hver lagerklasse, som ofte bruges i C-programmering

Opbevaringsklasse Erklæring Opbevaring Standard startværdi Anvendelsesområde Livstid
auto Inde i en funktion / blok Hukommelse Uforudsigelig Inden for funktionen / blokken Inden for funktionen / blokken
Tilmeld Inde i en funktion / blok CPU-registre Affald Inden for funktionen / blokken Inden for funktionen / blokken
ekstern Uden for alle funktioner Hukommelse Nul Hele filen og andre filer, hvor variablen erklæres som ekstern programkørselstid
Statisk (lokal) Inde i en funktion / blok Hukommelse Nul Inden for funktionen / blokken programkørselstid
Statisk (global) Uden for alle funktioner Hukommelse Nul Global programkørselstid

Resumé

I denne vejledning har vi diskuteret lagringsklasser i C for at opsummere:

  • En lagringsklasse i C bruges til at repræsentere yderligere information om en variabel.
  • Opbevaringsklasse 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 lagringsklasser i et C-program.
  • En lagerklassespecifikator på C-sprog bruges til at definere variabler, funktioner og parametre.
  • auto bruges til en lokal variabel defineret inden for en blok eller funktion
  • register bruges til at gemme variablen i CPU-registre snarere hukommelsesplacering for hurtig adgang.
  • Statisk bruges til både globale og lokale variabler. Hver enkelt har sin brugssag inden for et C-program.
  • Extern bruges til datadeling mellem C-projektfiler.