Úvod do tried úložiska C

Každá hodnota alebo číslo je potrebné niekde uložiť na neskoršie použitie, však? Toto je možné dosiahnuť pomocou premenných v C. Premenné sú úložné oblasti používané v našich programoch. Každá premenná bude špecifického typu, ako je celé číslo, znak a tiež bude mať špecifickú veľkosť a rozloženie v závislosti od ich typu. Každý typ premennej by mal byť uložený v konkrétnej časti pamäte a mal by mať obmedzené alebo špecifické prístupové oprávnenia. Triedy úložiska v C určuje, v ktorej časti pamäte by mala byť každá premenná uložená, a tiež určuje rozsah (viditeľnosť) premennej. Existujú štyri typy tried úložiska - auto, externý, statický a register. Spolu s premennou možno uviesť jeden špecifikátor úložiska.

Typy tried úložiska v C

Typy tried úložiska v C sú nasledujúce

1. Trieda automatického ukladania

Všetky premenné deklarované v rámci funkcie alebo bloku budú štandardne uložené v automatickom špecifikátore, aj keď nie sú explicitne definované. Špecifikátor pre túto triedu úložiska je „auto“. Rozsah alebo viditeľnosť premenných v triede automatického úložiska je lokálna pre blok alebo funkciu, ktorá je definovaná. Premenná bude zničená, keď vystúpime z funkcie alebo bloku.

Toto je možné lepšie vysvetliť na príklade. Zoberme si príklad uvedený nižšie:

kód:

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

Výkon:

4

2

Tu je prvá premenná I typu celé číslo deklarovaná s hodnotou 2, ktorá je jej priradená. Ďalej sa vo vnútri slučky alebo bloku opäť deklaruje premenná I rovnakého typu celého čísla s priradenou hodnotou 4. Ak špecifikátor úložiska nie je uvedený, v predvolenom nastavení sa bude považovať za automatický. V prvom výpise printf, ktorý je uvedený vo vnútri bloku, sa vytlačí 4 pri tlači hodnoty I. Zatiaľ čo v druhom výpise printf, ktorý sa uvádza mimo bloku, sa vytlačí hodnota I ako 2, hodnota, ktorá sa uvádza mimo tohto bloku. blok. Je lepšie inicializovať nejakú hodnotu do auto premenných, pretože ak sa inicializácia neuskutoční, existuje šanca na získanie nejakého odpadu. Tento príklad poskytuje jasný obraz o automatických premenných ao miestnom rozsahu.

2. Zaregistrujte triedu úložiska

Premenné uložené v triede úložiska registrov budú mať tiež lokálny rozsah, čo znamená, že je prístupná alebo viditeľná iba v bloku, v ktorom je deklarovaná. Toto úložisko je podobné automatickému, ale hlavným rozdielom je, že automatické premenné sú uložené v pamäti, zatiaľ čo premenné registrov sú uložené v registroch CPU. Deje sa to, ak chceme k premennej pristupovať veľmi často. Tieto sa dajú použiť rýchlejšie. Pomocou špecifikátorov registrov sa uloží iba niekoľko premenných. Ak v registri nie je miesto, uloží sa iba do pamäte. K premenným registra nie je priradená žiadna počiatočná hodnota. Operátor & (adresa) sa tiež nemôže použiť na premenné registra. Napríklad premenné, ktoré sa používajú pre počítadlá alebo podobné typy použitia, sa ukladajú pomocou špecifikátora registra.

3. Statická skladovacia trieda

Premenná, či už je globálna alebo miestna, sa ukladá pomocou statického špecifikátora v statickej triede úložiska, keď je potrebné premennú deklarovať raz a je potrebné zachovať hodnotu. Ak je premenná deklarovaná ako statická, hodnota sa uloží alebo zachová medzi volaniami funkcií. Vytvorí sa trvalé úložisko a deklaruje sa iba raz. Ak je lokálna premenná deklarovaná ako statická, pre ňu sa vytvorí trvalé úložisko a hodnota sa pri každom použití zachová. Tiež podľa rozsahu obvyklej lokálnej premennej sú statické lokálne premenné viditeľné iba pre funkciu alebo blok, kde je definovaná. Ak je globálna premenná deklarovaná ako statická, podobná statickej lokálnej, vytvorí sa trvalé úložisko a deklaruje sa iba raz. Aj keď je to globálne, tieto premenné sú viditeľné iba v súbore, v ktorom sú definované.

Statické premenné možno jasne znázorniť pomocou nasledujúceho príkladu:

kód:

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

Výkon:

2

4

Tu, vo vyššie uvedenom programe, keď sa volá samplefunc (), je definovaná a inicializovaná premenná a pri prvom vytvorení trvalého úložiska. Matematickým výrazom použitým vo funkcii sa potom hodnota a stane 2. Ale keď sa tá istá vzorkafunc () nazýva druhýkrát, premenná a nie je znovu definovaná alebo inicializovaná, skôr vezme poslednú zachovanú hodnotu a pokračuje v operácii dosiahnutie konečného výsledku ako 4. Toto je hlavné použitie a výhoda statických premenných.

4. Externá skladovacia trieda

Premenná deklarovaná ako externá, zobrazuje, že premenná je definovaná inde v inom programe. Tieto vonkajšie premenné sa používajú, keď chceme, aby sa akákoľvek premenná alebo funkcia definovaná v jednom programe použila aj v inom súbore. Premenné s externým špecifikátorom sú uložené v triede externého úložiska. Ak je premenná deklarovaná ako externá, je to program, určuje externé prepojenie, a preto už nie je definovaná alebo inicializovaná. Úložný priestor je pridelený iba jeden a tiež inicializovaný iba raz. Ak sa externé premenné inicializujú znova s ​​inou hodnotou v externom programe, dostaneme chybu s oznámením „Predefinovanie premennej“.

Vonkajšie premenné sú vysvetlené pomocou nasledujúceho príkladu:

kód:

Prg1.c

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

Prg2.c

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

Výkon:

10

Tu je celé číslo premennej deklarované v prvom C programe (Prg1.c) a vo vnútri hlavnej funkcie je inicializovaný na hodnotu 10. V druhom C programe je rovnaká premenná počtu deklarovaná pomocou externého špecifikátora, ktorý špecifikuje, že existuje externé spojenie a hodnota je vyzdvihnutá z úložiska a hodnota 10 je priradená k počtu hodnôt, keď ju vytlačíme v druhom programe. Toto je použitie externých premenných. Preto sa v závislosti od odlišného účelu každá trieda úložiska používa pre príslušné premenné a deklaruje sa so zodpovedajúcimi špecifikátormi.

Odporúčané články

Toto je sprievodca triedami C Storage. Tu diskutujeme typy tried úložiska, ktoré zahŕňajú triedu automatického úložiska, triedu úložiska registra, statickú triedu úložiska a externú triedu úložiska. Viac informácií nájdete aj v nasledujúcich článkoch -

  1. Čo je to JavaBeans?
  2. ES6 vs ES5
  3. C ++ verzus Visual C ++
  4. Výkonnosť C verzus C ++

Kategórie: