Tárolási osztályok C-ben: automatikus, külső, statikus, nyilvántartás (példák)

Mi az a tárolási osztály C-ben?

A tárolási osztály egy változó láthatóságát és helyét jelenti. Megmondja, hogy a kód mely részéből érhetünk el egy változót. A C-beli tárolási osztály a következő dolgok leírására szolgál:

  • A változó hatókör.
  • A változó tárolási helye.
  • Egy változó inicializált értéke.
  • Egy változó élettartama.
  • Ki férhet hozzá egy változóhoz?

Így egy tárolási osztályt használnak a változóval kapcsolatos információk megjelenítésére.

JEGYZET: Egy változó nem csak a adattípus, értéke, hanem egy tárolási osztály is.

Milyen típusú tárolási osztályok vannak a C-ben?

Összesen négyféle szabványos tárolási osztály létezik. Az alábbi táblázat a tárolási osztályokat mutatja C-ben.

Tárolási osztály Cél
auto Ez egy alapértelmezett tárolási osztály.
külső Ez egy globális változó.
statikus Ez egy helyi változó, amely akkor is képes értéket visszaadni, ha a vezérlést a függvényhívásra adjuk át.
Regisztráció Ez egy változó, amelyet egy regiszterben tárolnak.

Automatikus tárolási osztály C-ben

Az automatikus tárolási osztály használatával definiált változókat helyi változóknak nevezzük. Az Auto az automatikus tárolási osztályt jelenti. Egy változó alapértelmezés szerint az automatikus tárolási osztályba tartozik, ha nincs kifejezetten megadva.

Az automatikus változó hatóköre csak az adott blokkra korlátozódik. Amint a vezérlő kilép a blokkból, a hozzáférés megsemmisül. Ez azt jelenti, hogy csak az a blokk férhet hozzá, amelyben az auto változó deklarálva van.

Az auto kulcsszó az automatikus tárolási osztály meghatározására szolgál. Alapértelmezés szerint az automatikus változó szemét értéket tartalmaz.

Example, auto int age;

Az alábbi program két lokális változóval rendelkező függvényt határoz meg

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

Vegyünk egy másik programot, amely megmutatja az egyes blokkkódokban lévő automatikus változók hatóköri szintű „láthatósági szintjét”, amelyek egymástól függetlenül vannak:

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

OUTPUT:

 3 2 1

Külső tárolási osztály C-ben

Extern a külső tárolási osztályt jelöli. A külső tárolási osztályt akkor használjuk, ha globális függvényeink vagy változóink vannak megosztva két vagy több fájl között.

Kulcsszó külső egy globális változó vagy függvény deklarálására szolgál egy másik fájlban, hogy az eredeti fájlban már definiált változóra vagy függvényre hivatkozzon.

Az extern kulcsszóval definiált változókat globális változóknak nevezzük. Ezek a változók a program egészében elérhetők. Figyelje meg, hogy a külső változót nem lehet inicializálni, mert az eredeti fájlban már definiálva van.

Example, extern void display();

Első fájl: main.c

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

Második fájl: original.c

#include <stdio.h>
i=48;

Eredmény:

 value of the external integer is = 48


A fenti kód lefordításához és futtatásához kövesse az alábbi lépéseket

Step 1) Új projekt létrehozása,

  1. Válassza a Konzolalkalmazás lehetőséget
  2. Kattintson a Go-ra

Külső tárolási osztály C-ben

Step 2) Válassza a C lehetőséget, majd kattintson a Tovább gombra

Külső tárolási osztály C-ben

Step 3) Kattintson a Tovább gombra

Külső tárolási osztály C-ben

Step 4) Adja meg a részleteket, majd kattintson a Tovább gombra

Külső tárolási osztály C-ben

Step 5) Kattintson a Befejezés gombra

Külső tárolási osztály C-ben

Step 6) Helyezze be a fő kódot az előző programban látható módon a main.c fájlba, és mentse el

Külső tárolási osztály C-ben

Step 7) Hozzon létre egy új C fájlt [Fájl -> új -> Üres fájl , mentse el (eredeti.c néven), és adja hozzá az aktuális projekthez a párbeszédablakban az „OK” gombra kattintva.

Külső tárolási osztály C-ben

Step 8) Helyezze el és mentse el az eredeti.c fájl C kódját, amely az előző példában látható, a main() függvény nélkül.

Külső tárolási osztály C-ben

Step 9) Építse fel és futtassa projektjét. Az eredmény a következő ábrán látható

Külső tárolási osztály C-ben

Statikus tárolási osztály C-ben

A statikus változókat a függvény/fájlon belül helyi statikus változóként használják. Használhatók továbbá a globális változó

  • A statikus helyi változó olyan helyi változó, amely megőrzi és tárolja értékét a függvényhívások vagy blokkok között, és csak az a funkció vagy blokk számára látható, amelyben definiálva van.
  • A statikus globális változók látható globális változók csak arra a fájlra, amelyben deklarálva van.
Example: static int count = 10;

Ne feledje, hogy a statikus változó alapértelmezett kezdőértéke nulla, és élete során csak egyszer inicializálódik.

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

Eredmény:

iteration=14 and counter= 7
iteration=15 and counter= 8
iteration=16 and counter= 9

A globális változók az egész fájlban elérhetők, míg a statikus változók csak a kód adott része számára érhetők el.

A statikus változó élettartama a teljes programkódban van. A statikus kulcsszóval deklarált vagy inicializált változó alapértelmezett értékeként mindig nullát tartalmaz.

Tárolási osztály regisztrálása C-ben

A regiszter tárolási osztályt akkor használhatja, ha a helyi változókat függvényeken vagy blokkokon belül kívánja tárolni a CPU regiszterekben. RAM hogy gyorsan hozzáférjenek ezekhez a változókhoz. Például a „számlálók” jó jelöltek a nyilvántartásban való tárolásra.

Example: register int age;

A kulcsszó Regisztráció regisztertárolási osztály deklarálására szolgál. A regisztertárolási osztály használatával deklarált változók élettartama a program teljes időtartama alatt megvan.

Hasonló az automatikus tárolási osztályhoz. A változó az adott blokkra korlátozódik. Az egyetlen különbség az, hogy a regiszter tárolási osztályával deklarált változókat a memória helyett a CPU regiszterekben tárolják. A regiszter gyorsabb hozzáféréssel rendelkezik, mint a fő memóriáé.

A regiszter tárolási osztály használatával deklarált változóknak nincs alapértelmezett értéke. Ezeket a változókat gyakran a program elején deklarálják.

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

OUTPUT:

error: address of register variable 'weight' requested

A következő táblázat összefoglalja az egyes tárolási osztályok főbb jellemzőit, amelyeket általában használnak a C programozásban

Tárolási osztály Nyilatkozat Tárolás Alapértelmezett kezdeti érték Kör Élettartam
auto Egy függvény/blokk belsejében Memory design kiszámíthatatlan A funkción/blokkon belül A funkción/blokkon belül
Regisztráció Egy függvény/blokk belsejében CPU regiszterek Szemét A funkción/blokkon belül A funkción/blokkon belül
külső Minden funkción kívül Memory design Nulla Teljes fájl és egyéb olyan fájlok, amelyekben a változó külsőként van deklarálva program futási ideje
Statikus (helyi) Egy függvény/blokk belsejében Memory design Nulla A funkción/blokkon belül program futási ideje
Statikus (globális) Minden funkción kívül Memory design Nulla Globál program futási ideje

Összegzésként

Ebben az oktatóanyagban a C-beli tárolási osztályokat tárgyaltuk, összefoglalva:

  • A C-beli tárolási osztály a változóval kapcsolatos további információk megjelenítésére szolgál.
  • A tárolási osztály egy változó hatókörét és élettartamát jelenti.
  • Azt is megmondja, hogy ki és honnan férhet hozzá egy változóhoz?
  • Auto, extern, register, static a négy különböző tárolási osztály egy C programban.
  • Tárolási osztály-meghatározó be C nyelv változók, függvények és paraméterek meghatározására szolgál.
  • Az auto egy blokkon vagy függvényen belül meghatározott helyi változóhoz használatos
  • A regiszter a változó CPU regiszterekben való tárolására szolgál, nem pedig memóriahelyre a gyors hozzáférés érdekében.
  • A statikus a globális és a lokális változókhoz is használható. Mindegyiknek megvan a maga használati esete egy C programon belül.
  • Az Extern a C projektfájlok közötti adatmegosztásra szolgál.