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,
- Válassza a Konzolalkalmazás lehetőséget
- Kattintson a Go-ra
Step 2) Válassza a C lehetőséget, majd kattintson a Tovább gombra
Step 3) Kattintson a Tovább gombra
Step 4) Adja meg a részleteket, majd kattintson a Tovább gombra
Step 5) Kattintson a Befejezés gombra
Step 6) Helyezze be a fő kódot az előző programban látható módon a main.c fájlba, és mentse el
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.
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.
Step 9) Építse fel és futtassa projektjét. Az eredmény a következő ábrán látható
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.