Lagringsklasser i C: auto, extern, statisk, registerklass i C

Innehållsförteckning:

Anonim

Vad är lagringsklass i C?

En lagringsklass representerar synligheten och placeringen av en variabel. Den berättar från vilken del av koden vi kan komma åt en variabel. En lagringsklass i C används för att beskriva följande saker:

  • Den variabla omfattningen.
  • Platsen där variabeln kommer att lagras.
  • Det initialiserade värdet för en variabel.
  • En variabels livstid.
  • Vem har åtkomst till en variabel?

Således används en lagringsklass för att representera informationen om en variabel.

OBS: En variabel är inte bara associerad med en datatyp, dess värde utan också en lagringsklass.

Det finns totalt fyra typer av standardlagringsklasser. Tabellen nedan representerar lagringsklasserna i C.

Lagringsklass Ändamål
bil Det är en standardlagringsklass.
extern Det är en global variabel.
statisk Det är en lokal variabel som kan returnera ett värde även när kontrollen överförs till funktionsanropet.
Registrera Det är en variabel som lagras i ett register.

I den här C-självstudien lär du dig olika typer av lagringsklasser i C med exempel-

  • Klass för automatisk lagring i C
  • Extern lagringsklass i C
    • Första filen: main.c
    • Andra filen: original.c
  • Statisk lagringsklass i C
  • Registrera lagringsklass i C

Klass för automatisk lagring i C

Variablerna definierade med hjälp av automatisk lagringsklass kallas som lokala variabler. Auto står för automatisk lagringsklass. En variabel är i klass för automatisk lagring om den inte uttryckligen anges.

Omfattningen av en automatisk variabel är begränsad med endast det specifika blocket. När kontrollen går ut ur blocket förstörs åtkomsten. Detta betyder att endast det block där den automatiska variabeln deklareras kan komma åt den.

Ett nyckelord auto används för att definiera en klass för automatisk lagring. Som standard innehåller en automatisk variabel ett skräpvärde.

Example, auto int age;

Programmet nedan definierar en funktion med har två lokala variabler

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

Vi tar ett annat program som visar omfångsnivån "synlighetsnivå" för autovariabler i varje blockkod som är oberoende av varandra:

#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 

Extern lagringsklass i C

Extern står för extern lagringsklass. Extern lagringsklass används när vi har globala funktioner eller variabler som delas mellan två eller flera filer.

Keyword extern används för att deklarera en global variabel eller funktion i en annan fil för att tillhandahålla referensen för variabel eller funktion som redan har definierats i originalfilen.

Variablerna som definieras med ett externt nyckelord kallas som globala variabler. Dessa variabler är tillgängliga i hela programmet. Observera att den externa variabeln inte kan initieras, den har redan definierats i originalfilen.

Example, extern void display();

Första filen: main.c

#include extern i;main() {printf("value of the external integer is = %d\n", i);return 0;}

Andra filen: original.c

#include i=48;

Resultat:

 value of the external integer is = 48

Följ stegen nedan för att kompilera och köra ovanstående kod

Steg 1) Skapa nytt projekt,

  1. Välj konsolapplikation
  2. Klicka på Go

Steg 2) Välj C och klicka på Nästa

Steg 3) Klicka på Nästa

Steg 4) Ange information och klicka på Nästa

Steg 5) Klicka på Slutför

Steg 6) Lägg huvudkoden som visas i föregående program i main.c-filen och spara den

Steg 7) Skapa en ny C-fil [Arkiv -> ny -> Töm fil, spara (som original.c) och lägg till den i det aktuella projektet genom att klicka på "OK" i dialogrutan.

Steg 8) Sätt och spara C-koden för original.c-filen som visas i föregående exempel utan huvudfunktionen ().

Steg 9) Bygg och kör ditt projekt. Resultatet visas i nästa bild

Statisk lagringsklass i C

De statiska variablerna används inom funktion / fil som lokala statiska variabler. De kan också användas som en global variabel

  • Statisk lokal variabel är en lokal variabel som behåller och lagrar sitt värde mellan funktionsanrop eller block och förblir synlig endast för den funktion eller det block där den är definierad.
  • Statiska globala variabler är globala variabler som endast är synliga för filen där de deklareras.
Example: static int count = 10;

Tänk på att den statiska variabeln har ett initialt initialvärde noll och initialiseras endast en gång under sin livstid.

#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

Globala variabler är tillgängliga i hela filen medan statiska variabler endast är tillgängliga för en viss del av en kod.

Livslängden för en statisk variabel finns i hela programkoden. En variabel som deklareras eller initialiseras med statiska nyckelord innehåller alltid noll som standardvärde.

Registrera lagringsklass i C

Du kan använda registerlagringsklassen när du vill lagra lokala variabler i funktioner eller block i CPU-register istället för RAM för att ha snabb åtkomst till dessa variabler. Till exempel är "räknare" en bra kandidat för att lagras i registret.

Example: register int age;

Nyckelordet registret används för att förklara ett register lagringsklass. Variablerna som deklareras med hjälp av registerlagringsklassen har livslängd under hela programmet.

Det liknar klass för automatisk lagring. Variabeln är begränsad till det specifika blocket. Den enda skillnaden är att variablerna som deklareras med hjälp av registerlagringsklass lagras i CPU-register istället för ett minne. Register har snabbare åtkomst än huvudminnets.

Variablerna som deklareras med hjälp av registerlagringsklassen har inget standardvärde. Dessa variabler deklareras ofta i början av ett 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

Nästa tabell sammanfattar de viktigaste funktionerna i varje lagringsklass som vanligtvis används i C-programmering

Lagringsklass Deklaration Lagring Standard initialvärde Omfattning Livstid
bil Inuti en funktion / block Minne Oförutsägbar Inom funktionen / blocket Inom funktionen / blocket
Registrera Inuti en funktion / block CPU-register Sopor Inom funktionen / blocket Inom funktionen / blocket
extern Utanför alla funktioner Minne Noll Hela filen och andra filer där variabeln deklareras som extern program körtid
Statisk (lokal) Inuti en funktion / block Minne Noll Inom funktionen / blocket program körtid
Statisk (global) Utanför alla funktioner Minne Noll Global program körtid

Sammanfattning

I denna handledning har vi diskuterat lagringsklasser i C, för att sammanfatta:

  • En lagringsklass i C används för att representera ytterligare information om en variabel.
  • Lagringsklass representerar omfattningen och livslängden för en variabel.
  • Den berättar också vem som kan komma åt en variabel och varifrån?
  • Auto, extern, register, statisk är de fyra olika lagringsklasserna i ett C-program.
  • En lagringsklassspecifikator på C-språk används för att definiera variabler, funktioner och parametrar.
  • auto används för en lokal variabel definierad i ett block eller en funktion
  • register används för att lagra variabeln i CPU-register snarare minnesplats för snabb åtkomst.
  • Statisk används för både globala och lokala variabler. Var och en har sitt användningsfall inom ett C-program.
  • Extern används för datadelning mellan C-projektfiler.