Lagringsklasser i C: Auto, Extern, Static, Register (exempel)

Vad är lagringsklass i C?

En lagringsklass representerar synligheten och en plats för 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:

  • Variabel omfattning.
  • Platsen där variabeln kommer att lagras.
  • Det initialiserade värdet för en variabel.
  • En variabels livstid.
  • Vem kan komma åt en variabel?

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

OBS: En variabel är inte bara associerad med a data typ, dess värde men också en lagringsklass.

Vilka typer av lagringsklasser finns i C?

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

Förvaringsklass Syfte
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 kontroll överförs till funktionsanropet.
registrera Det är en variabel som lagras i ett register.

Billagringsklass i C

Variablerna som definieras med autolagringsklassen kallas lokala variabler. Auto står för automatisk lagringsklass. En variabel är som standard i autolagringsklassen om den inte är explicit specificerad.

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 innebär att endast blocket där den automatiska variabeln deklareras kan komma åt den.

Ett nyckelord auto används för att definiera en autolagringsklass. Som standard innehåller en autovariabel ett skräpvärde.

Example, auto int age;

Programmet nedan definierar en funktion med två lokala variabler

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

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

#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

Extern förvaringsklass 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.

Nyckelord extern används för att deklarera en global variabel eller funktion i en annan fil för att ge referensen till variabel eller funktion som redan har definierats i den ursprungliga filen.

Variablerna som definieras med hjälp av ett externt nyckelord kallas 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 <stdio.h>
extern i;
main() {
   printf("value of the external integer is = %d\n", i);
   return 0;}

Andra filen: original.c

#include <stdio.h>
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å Gå

Extern förvaringsklass i C

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

Extern förvaringsklass i C

Steg 3) Klicka på Nästa

Extern förvaringsklass i C

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

Extern förvaringsklass i C

Steg 5) Klicka på Slutför

Extern förvaringsklass i C

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

Extern förvaringsklass i C

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

Extern förvaringsklass i C

Steg 8) Lägg och spara C-koden för original.c-filen som visas i föregående exempel utan main()-funktionen.

Extern förvaringsklass i C

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

Extern förvaringsklass i C

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 funktionen eller blocket där den är definierad.
  • Statiska globala variabler är globala variabler som är synliga endast till filen där den deklareras.
Example: static int count = 10;

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

#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

Globala variabler är tillgängliga i hela filen medan statiska variabler endast är tillgängliga för den specifika delen av en kod.

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

Registrera lagringsklass i C

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

Example: register int age;

Nyckelordet registrera används för att deklarera en registerlagringsklass. Variablerna som deklareras med registerlagringsklassen har livslängd under hela programmet.

Det liknar autolagringsklassen. Variabeln är begränsad till det specifika blocket. Den enda skillnaden är att variablerna som deklareras med registerlagringsklassen lagras i CPU-register istället för ett minne. Register har snabbare åtkomst än huvudminnet.

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

Nästa tabell sammanfattar de huvudsakliga egenskaperna för varje lagringsklass som vanligtvis används i C-programmering

Förvaringsklass Förklaring lagring Standard initialt värde Omfattning Livslängd
bil Inuti en funktion/block Minne Oförutsägbar Inom funktionen/blocket Inom funktionen/blocket
registrera Inuti en funktion/block CPU-register Skräp Inom funktionen/blocket Inom funktionen/blocket
extern Utanför alla funktioner Minne Noll Hela filen och andra filer där variabeln deklareras som extern programmets körtid
Statisk (lokal) Inuti en funktion/block Minne Noll Inom funktionen/blocket programmets körtid
Statisk (global) Utanför alla funktioner Minne Noll Välgörenhet programmets körtid

Sammanfattning

I den här handledningen 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 talar också om vem som kan komma åt en variabel och varifrån?
  • Auto, extern, register, static är de fyra olika lagringsklasserna i ett C-program.
  • En lagringsklassspecifikator i C-språk används för att definiera variabler, funktioner och parametrar.
  • auto används för en lokal variabel definierad inom 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.