Inleiding tot C-opslagklassen

Elke waarde of nummer moet ergens worden opgeslagen voor later gebruik, toch? Dit kan worden gedaan met behulp van variabelen in C. Variabelen zijn opslaggebieden die in onze programma's worden gebruikt. Elke variabele zal van een specifiek type zijn, zoals een geheel getal, karakter en zal ook een specifieke grootte en lay-out hebben, afhankelijk van hun type. Elk type variabele moet worden opgeslagen in een specifiek deel van het geheugen en heeft beperkte of specifieke toegangsmachtigingen. Opslagklassen in C bepalen in welk deel van het geheugen elke variabele moet worden opgeslagen en bepaalt ook de reikwijdte (zichtbaarheid) van de variabele. Er zijn vier soorten opslagklassen: auto, extern, statisch en register. Eén opslagspecificatie kan worden vermeld samen met de variabele.

Soorten opslagklassen in C

Soorten opslagklassen in C zijn als volgt

1. Automatische opslagklasse

Alle variabelen die binnen een functie of blok worden gedeclareerd, worden standaard in een autospecificatie opgeslagen, ook als deze niet expliciet is gedefinieerd. De specificator voor deze opslagklasse is 'auto'. Het bereik of de zichtbaarheid van de variabelen in de automatische opslagklasse is lokaal voor het blok of de functie die wordt gedefinieerd. De variabele wordt vernietigd zodra we uit de functie of het blok komen.

Dit kan met een voorbeeld beter worden verklaard. Overweeg het onderstaande voorbeeld:

Code:

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

Output:

4

2

Hier wordt eerst een variabele I van het type geheel getal gedeclareerd waaraan waarde 2 is toegewezen. Vervolgens wordt binnen een lus of blok opnieuw variabele I van hetzelfde gehele getal gedeclareerd waaraan waarde 4 is toegewezen. Als opslagspecificatie niet wordt vermeld, wordt deze standaard als automatisch beschouwd. In de eerste printf-instructie, die binnen het blok wordt vermeld, wordt 4 afgedrukt bij het afdrukken van de waarde van I. Terwijl in de tweede printf-instructie die buiten het blok wordt vermeld, de waarde van I als 2 wordt afgedrukt, de waarde die buiten wordt vermeld het blok. Het is beter om enige waarde te initialiseren voor autovariabelen omdat er kansen zijn om afvalwaarde te krijgen soms als initialisatie niet wordt gedaan. Dit voorbeeld geeft een duidelijk beeld van autovariabelen en over lokaal bereik.

2. Registreer opslagklasse

De variabelen die zijn opgeslagen in de registeropslagklasse hebben ook een lokaal bereik, wat betekent dat deze alleen toegankelijk of zichtbaar is in het blok waarin ze wordt gedeclareerd. Deze opslag is vergelijkbaar met auto, maar het belangrijkste verschil is dat autovariabelen in het geheugen worden opgeslagen, terwijl de registervariabelen worden opgeslagen in de CPU-registers. Dit wordt gedaan als we heel vaak toegang tot de variabele willen hebben. Deze kunnen sneller worden gebruikt. Slechts een paar variabelen worden opgeslagen met behulp van registerspecificaties. Als er geen ruimte in het register is, wordt deze alleen in het geheugen opgeslagen. Er is geen beginwaarde toegewezen aan de registervariabelen. Ook kan & (adres-van) operator niet worden gebruikt voor registervariabelen. Variabelen die worden gebruikt voor tellers of vergelijkbare gebruikstypen worden bijvoorbeeld opgeslagen met behulp van registerspecificatie.

3. Statische opslagklasse

Variabele, of deze nu globaal of lokaal is, wordt opgeslagen met behulp van de statische specificator in de statische opslagklasse wanneer de variabele eenmaal moet worden gedeclareerd en de waarde moet worden behouden. Als een variabele statisch wordt verklaard, wordt de waarde opgeslagen of behouden tussen de functieaanroepen. Er wordt permanente opslag gemaakt en deze wordt slechts eenmaal aangegeven. Wanneer een lokale variabele statisch wordt verklaard, wordt er permanente opslag voor gemaakt en blijft de waarde behouden wanneer deze wordt gebruikt. Volgens het bereik van de gebruikelijke lokale variabele zijn statische lokale variabelen ook alleen zichtbaar voor de functie of het blok waar deze is gedefinieerd. Wanneer een globale variabele statisch wordt verklaard, vergelijkbaar met statisch lokaal, wordt permanente opslag gemaakt en wordt deze slechts eenmaal gedeclareerd. Maar hoewel het globaal is, zijn deze variabelen alleen zichtbaar in het bestand waarin het is gedefinieerd.

Statische variabelen kunnen duidelijk worden afgebeeld met behulp van het onderstaande voorbeeld:

Code:

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

Output:

2

4

Hier, in het bovenstaande programma, wordt, wanneer de samplefunc () wordt aangeroepen, de variabele a de eerste keer gedefinieerd en geïnitialiseerd en wordt er permanente opslag voor gemaakt. Door de wiskundige uitdrukking die in de functie wordt gebruikt, wordt de waarde van a dan 2. Maar wanneer dezelfde samplefunc () de tweede keer wordt genoemd, wordt variabele a niet opnieuw gedefinieerd of geïnitialiseerd, maar neemt de laatst behouden waarde en gaat verder met de bewerking waardoor het eindresultaat 4 wordt. Dit is het belangrijkste gebruik en voordeel van statische variabelen.

4. Externe opslagklasse

Variabele gedeclareerd als extern, geeft aan dat de variabele elders in een ander programma wordt gedefinieerd. Deze externe variabelen worden gebruikt wanneer we willen dat elke variabele of functie die in het ene programma is gedefinieerd, ook in een ander bestand wordt gebruikt. De variabelen met extern specifier worden opgeslagen in de externe opslagklasse. Wanneer de variabele wordt gedeclareerd als extern een programma is, geeft dit de externe koppeling aan en daarom wordt deze niet opnieuw gedefinieerd of geïnitialiseerd. Opslag wordt slechts één toegewezen en ook slechts eenmaal geïnitialiseerd. Als externe variabelen opnieuw worden geïnitialiseerd met een andere waarde in het externe programma, krijgen we een foutmelding met 'Redefinition of the variable'.

Externe variabelen worden uitgelegd aan de hand van het onderstaande voorbeeld:

Code:

Prg1.c

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

Prg2.c

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

Output:

10

Hier wordt het aantal variabelen met gehele getallen gedeclareerd in het eerste C-programma (Prg1.c) en binnen de hoofdfunctie wordt het geïnitialiseerd op waarde 10. In het tweede C-programma wordt dezelfde telvariabele gedeclareerd met een externe specificator, die aangeeft dat er is externe koppeling en de waarde wordt opgehaald uit de opslag en de waarde 10 wordt gegeven aan de waardetelling wanneer we deze afdrukken in het tweede programma. Dit is het gebruik van externe variabelen. Dus, afhankelijk van het verschillende doel, worden elke opslagklassen gebruikt voor de juiste variabelen en wordt het gedeclareerd met de bijbehorende specificatie.

Aanbevolen artikelen

Dit is een handleiding voor de C Storage Classes. Hier bespreken we soorten opslagklassen, waaronder automatische opslagklasse, registeropslagklasse, statische opslagklasse en externe opslagklasse. U kunt ook de volgende artikelen bekijken voor meer informatie–

  1. Wat is JavaBeans?
  2. ES6 versus ES5
  3. C ++ versus Visual C ++
  4. C versus C ++ Prestaties