Triedy úložiska v jazyku C: auto, externý, statický, registrovať triedu v jazyku C.

Obsah:

Anonim

Čo je trieda úložiska v jazyku C?

Trieda úložiska predstavuje viditeľnosť a umiestnenie premennej. Hovorí o tom, z ktorej časti kódu môžeme získať prístup k premennej. Trieda úložiska v jazyku C sa používa na opis nasledujúcich vecí:

  • Variabilný rozsah.
  • Miesto, kde bude premenná uložená.
  • Inicializovaná hodnota premennej.
  • Životnosť premennej.
  • Kto má prístup k premennej?

Teda trieda úložiska sa používa na reprezentáciu informácií o premennej.

POZNÁMKA: Premenná nie je spojená iba s dátovým typom, jeho hodnotou, ale aj s triedou úložiska.

Existujú celkom štyri typy štandardných tried ukladacích priestorov. Nasledujúca tabuľka predstavuje triedy úložiska v C.

Skladovacia trieda Účel
auto Je to predvolená trieda úložiska.
externý Je to globálna premenná.
statický Je to lokálna premenná, ktorá je schopná vrátiť hodnotu, aj keď sa riadenie prenáša na volanie funkcie.
Registrovať Je to premenná, ktorá je uložená v registri.

V tomto tutoriáli C sa naučíte rôzne typy tried ukladania v jazyku C s príkladmi -

  • Trieda automatického ukladania v C.
  • Trieda externého skladovania v C.
    • Prvý súbor: main.c
    • Druhý súbor: original.c
  • Statická trieda skladovania v C.
  • Registrovať triedu úložiska v C

Trieda automatického ukladania v C.

Premenné definované pomocou triedy automatického ukladania sa nazývajú lokálne premenné. Auto znamená triedu automatického ukladania. Premenná je v predvolenom nastavení v triede automatického ukladania, ak nie je výslovne uvedená.

Rozsah automatickej premennej je obmedzený iba na konkrétny blok. Akonáhle riadenie vypadne z bloku, prístup je zničený. To znamená, že k nej má prístup iba blok, v ktorom je deklarovaná automatická premenná.

Na definovanie triedy automatického ukladania sa používa kľúčové slovo auto. Automaticky obsahuje automaticky premennú hodnotu smetia.

Example, auto int age;

Program dole definuje funkciu s má dve lokálne premenné

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

Vezmeme si ďalší program, ktorý zobrazuje úroveň rozsahu „úroveň viditeľnosti“ pre automatické premenné v každom blokovom kóde, ktoré sú navzájom nezávislé:

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

VÝKON:

 3 2 1 

Trieda externého skladovania v C.

Externé znamená triedu externého úložiska. Trieda externého úložiska sa používa, keď máme globálne funkcie alebo premenné, ktoré sú zdieľané medzi dvoma alebo viacerými súbormi.

Kľúčové slovo extern sa používa na deklarovanie globálnej premennej alebo funkcie v inom súbore, aby sa poskytol odkaz na premennú alebo funkciu, ktoré už boli definované v pôvodnom súbore.

Premenné definované pomocou externého kľúčového slova sa nazývajú globálne premenné. Tieto premenné sú prístupné v celom programe. Všimnite si, že externú premennú nie je možné inicializovať, pretože už bola definovaná v pôvodnom súbore.

Example, extern void display();

Prvý súbor: main.c

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

Druhý súbor: original.c

#include i=48;

Výsledok:

 value of the external integer is = 48

Ak chcete zostaviť a spustiť vyššie uvedený kód, postupujte podľa nasledujúcich krokov

Krok 1) Vytvorte nový projekt,

  1. Vyberte možnosť Konzolová aplikácia
  2. Kliknite na tlačidlo Prejsť

Krok 2) Vyberte C a kliknite na Ďalej

Krok 3) Kliknite na Ďalej

Krok 4) Zadajte podrobnosti a kliknite na Ďalej

Krok 5) Kliknite na Dokončiť

Krok 6) Vložte hlavný kód, ako je znázornené v predchádzajúcom programe, do súboru main.c a uložte ho

Krok 7) Vytvorte nový súbor C [Súbor -> nový -> Prázdny súbor, uložte (ako originál.c) a pridajte ho do aktuálneho projektu kliknutím na tlačidlo „OK“ v dialógovom okne.

Krok 8) Vložte a uložte C kód súboru original.c zobrazeného v predchádzajúcom príklade bez funkcie main ().

Krok 9) Vytvorte a spustite svoj projekt. Výsledok je uvedený na nasledujúcom obrázku

Statická trieda skladovania v C.

Statické premenné sa používajú v rámci funkcie / súboru ako lokálne statické premenné. Môžu sa tiež použiť ako globálna premenná

  • Statická lokálna premenná je lokálna premenná, ktorá si zachováva a ukladá svoju hodnotu medzi volaniami funkcií alebo blokmi a zostáva viditeľná iba pre funkciu alebo blok, v ktorom je definovaná.
  • Statické globálne premenné sú globálne premenné viditeľné iba pre súbor, v ktorom sú deklarované.
Example: static int count = 10;

Pamätajte, že statická premenná má predvolenú počiatočnú hodnotu nula a inicializuje sa iba raz za svoju životnosť.

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

Výsledok:

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

Globálne premenné sú prístupné v celom súbore, zatiaľ čo statické premenné sú prístupné iba pre konkrétnu časť kódu.

Životnosť statickej premennej je v celom programovom kóde. Premenná, ktorá je deklarovaná alebo inicializovaná pomocou statického kľúčového slova, obsahuje ako predvolenú hodnotu vždy nulu.

Registrovať triedu úložiska v C

Triedu úložiska registrov môžete použiť, ak chcete ukladať miestne premenné do funkcií alebo blokov do registrov CPU namiesto RAM, aby ste k týmto premenným mali rýchly prístup. Napríklad „počítadlá“ sú vhodným kandidátom na zápis do registra.

Example: register int age;

Kľúčové slovo register sa používa na deklaráciu triedy úložiska registrov. Premenné deklarované pomocou triedy úložiska registra majú životnosť v celom programe.

Je to podobné ako s triedou automatického ukladania. Premenná je obmedzená na konkrétny blok. Jediný rozdiel je v tom, že premenné deklarované pomocou triedy úložiska registrov sú uložené v registroch CPU namiesto v pamäti. Register má rýchlejší prístup ako prístup k hlavnej pamäti.

Premenné deklarované pomocou triedy úložiska registra nemajú predvolenú hodnotu. Tieto premenné sa často deklarujú na začiatku programu.

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

VÝKON:

error: address of register variable 'weight' requested

V nasledujúcej tabuľke sú zhrnuté základné funkcie jednotlivých tried úložných zariadení, ktoré sa bežne používajú v programovaní v jazyku C.

Skladovacia trieda Vyhlásenie Skladovanie Predvolená počiatočná hodnota Rozsah Život
auto Vo vnútri funkcie / bloku Pamäť Nepredvídateľné V rámci funkcie / bloku V rámci funkcie / bloku
Registrovať Vo vnútri funkcie / bloku Registre CPU Odpadky V rámci funkcie / bloku V rámci funkcie / bloku
externý Mimo všetkých funkcií Pamäť Nula Vložte celý súbor a ďalšie súbory, v ktorých je premenná deklarovaná ako externá runtime programu
Statický (miestny) Vo vnútri funkcie / bloku Pamäť Nula V rámci funkcie / bloku runtime programu
Statický (globálny) Mimo všetkých funkcií Pamäť Nula Globálne runtime programu

Zhrnutie

V tomto tutoriáli sme diskutovali triedy ukladania v C, aby sme zhrnuli:

  • Trieda pamäte v C sa používa na vyjadrenie ďalších informácií o premennej.
  • Trieda úložiska predstavuje rozsah a životnosť premennej.
  • Tiež informuje, kto a odkiaľ má prístup k premennej.
  • Auto, extern, register, static sú štyri rôzne triedy ukladania v programe C.
  • Na definovanie premenných, funkcií a parametrov sa používa špecifikátor triedy úložiska v jazyku C.
  • auto sa používa pre lokálnu premennú definovanú v rámci bloku alebo funkcie
  • register slúži na ukladanie premenných do registrov CPU, skôr do pamäťového miesta pre rýchly prístup.
  • Statická hodnota sa používa pre globálne aj lokálne premenné. Každý z nich má svoj prípad použitia v rámci programu C.
  • Extern sa používa na zdieľanie údajov medzi súbormi projektu C.