Introduktion till C-lagringsklasser

Varje värde eller nummer måste lagras på någon plats för senare användning, eller hur? Detta kan göras med variabler i C. Variabler är lagringsområden som används i våra program. Varje variabel kommer att vara av en specifik typ som heltal, tecken och har också specifik storlek och layout beroende på deras typ. Varje typ av variabel bör lagras i en specifik del av minnet och har begränsade eller specifika åtkomstbehörigheter. Lagringsklasser i C avgör i vilken del av minnet varje variabel ska lagras och även den bestämmer variabelns omfattning (synlighet). Det finns fyra typer av lagringsklasser - auto, extern, statisk och register. En lagringsspecifikation kan nämnas tillsammans med variabeln.

Typer av lagringsklasser i C

Typer av lagringsklasser i C är följande

1. Automatisk lagringsklass

Alla variabler som deklarerats inom en funktion eller ett block kommer att lagras i en autospecifikator som standard även om det inte är uttryckligen definierat. Specifikatorn för denna lagringsklass är 'auto'. Omfattningen eller synligheten för variablerna i automatisk lagringsklass är lokal för det block eller den funktion som det definieras. Variabeln kommer att förstöras när vi kommer ut ur funktionen eller blocket.

Detta kan förklaras bättre med ett exempel. Tänk på exemplet nedan:

Koda:

int main() (
int i = 2;
( int i = 4;
printf(“%d\n”, i);
)
printf(“%d\n”, i);
)

Produktion:

4

2

Här förklaras en variabel I av typ heltal först med värde 2 tilldelat det. Nästa inuti en slinga eller block igen förklaras variabel I av samma heltalstyp med värdet 4 tilldelat den. Om lagringsspecifikationen inte nämns, kommer den som standard att tas som auto. I det första printf-uttalandet, som nämns inuti blocket, kommer det att skrivas ut 4 vid utskrift av värdet på I. Medan det andra printf-uttalandet som nämns utanför blocket kommer att skriva ut värdet på I som 2, kommer värdet som nämns utanför kvarteret. Det är bättre att initialisera vissa värden till autovariabler eftersom det finns chanser att få något skräpvärde ibland om initialisering inte görs. Detta exempel ger en tydlig bild av autovariabler och om lokalt omfång.

2. Registrera lagringsklass

Variablerna lagrade i registerlagringsklassen kommer också att ha lokal räckvidd, vilket innebär att den endast är tillgänglig eller synlig i det block där det deklareras. Denna lagring liknar auto, men huvudskillnaden är att autovariabler lagras i minnet medan registervariablerna lagras i CPU-register. Detta görs om vi vill komma åt variabeln mycket ofta. Dessa kan användas snabbare. Endast ett fåtal variabler lagras med registerspecifikationer. Om det inte finns något utrymme i registret lagras det bara i minnet. Inget initialvärde tilldelas registervariablerna. Operatören & (adressadress) kan inte heller användas på registervariabler. Till exempel lagras variabler som används för räknare eller liknande användningstyper med registerspecifikatorn.

3. Statisk lagringsklass

Variabel, kan den vara global eller lokal, lagras med statisk specifikator i statisk lagringsklass när variabeln måste deklareras en gång och värdet måste behållas. När en variabel deklareras som statisk sparas eller behålls värdet mellan funktionssamtal. Permanent lagring skapas och det deklareras endast en gång. När en lokal variabel förklaras som statisk skapas permanent lagring för den och värdet behålls varje gång den används. Också i omfattning av den vanliga lokala variabeln är statiska lokala variabler också synliga endast för funktionen eller blocket där den är definierad. När en global variabel deklareras som statisk, liknar statisk lokal, skapas permanent lagring och den deklareras endast en gång. Men även om det är globalt är dessa variabler bara synliga i filen som den definieras i.

Statiska variabler kan tydligt avbildas med följande exempel:

Koda:

int samplefunc() (
static int a = 0;
a = a+2;
return a;
)
int main() (
int result1 = samplefunc();
int result2 = samplefunc();
printf("%d\n", result1);
printf("%d\n", result2);
)

Produktion:

2

4

I ovanstående program, när samplefunc () kallas, definieras och initieras variabeln första gången och permanent lagring skapas för det. Genom det matematiska uttrycket som används i funktionen blir värdet på a då 2. Men när samma sampelfunk () kallas andra gången definieras eller initialiseras variabeln inte igen, det tar snarare det sista behållna värdet och fortsätter med operationen vilket gör slutresultatet som 4. Detta är den huvudsakliga användningen och fördelen med statiska variabler.

4. Extern lagringsklass

Variabel som deklareras som extern, visar att variabeln definieras någon annanstans i ett annat program. Dessa externa variabler används när vi vill att någon variabel eller funktion som definieras i ett program också ska användas i en annan fil. Variablerna med extern specificer lagras i extern lagringsklass. När variabeln förklaras som extern är ett program, specificerar den den externa länken, och därför definieras eller initialiseras den inte igen. Lagring tilldelas endast en och initialiseras också en gång. Om externa variabler initialiseras igen med ett annat värde i det externa programmet, får vi ett fel med "Redefinition av variabeln".

Externa variabler förklaras med hjälp av följande exempel:

Koda:

Prg1.c

int count;
int main() (
count = 10;
)

Prg2.c

extern int count;
int main() (
printf(“%d”, count);
)

Produktion:

10

Här deklareras heltalets variabeltal i det första C-programmet (Prg1.c) och inuti huvudfunktionen initialiseras det till värde 10. I det andra C-programmet deklareras samma räknarvariabel med extern specificer, som specificerar att det finns extern länkning och värdet hämtas från lagringsutrymmet och värdet 10 ges till värdena när vi skriver ut det i det andra programmet. Detta är användningen av externa variabler. Beroende på olika ändamål används så varje lagringsklasser för lämpliga variabler och det deklareras med motsvarande specifikatorer.

Rekommenderade artiklar

Detta är en guide till C-lagringsklasserna. Här diskuterar vi typer av lagringsklasser som inkluderar automatisk lagringsklass, register lagringsklass, statisk lagringsklass och extern lagringsklass. Du kan också titta på följande artiklar för att lära dig mer–

  1. Vad är JavaBeans?
  2. ES6 vs ES5
  3. C ++ vs Visual C ++
  4. C vs C ++ Prestanda

Kategori: