C-klassi salvestusklassid: auto, väline, staatiline, registriklass C-s

Lang L: none (table-of-contents):

Anonim

Mis on C-klassi hoiuklass?

Salvestusklass tähistab muutuja nähtavust ja asukohta. See ütleb, millisest koodi osast saame muutujale juurde pääseda. C-s asuvat salvestusklassi kasutatakse järgmiste asjade kirjeldamiseks:

  • Muutuv ulatus.
  • Muutuja salvestuskoht.
  • Muutuja initsialiseeritud väärtus.
  • Muutuja eluiga.
  • Kes pääseb muutujale juurde?

Seega kasutatakse muutuja kohta teabe esitamiseks salvestusklassi.

MÄRKUS. Muutuja on seotud mitte ainult andmetüübiga, selle väärtusega, vaid ka salvestusklassiga.

Standardseid hoiuklasse on kokku nelja tüüpi. Allolevas tabelis on esitatud C-klassid.

Ladustamisklass Eesmärk
automaatne See on vaikimisi salvestusklass.
välimine See on globaalne muutuja.
staatiline See on lokaalne muutuja, mis on võimeline väärtust tagastama ka siis, kui juhtimine on funktsioonikutsele üle viidud.
Registreeri See on muutuja, mis on salvestatud registrisse.

Selles C-õpetuses saate õppida erinevaid C-tüüpi salvestusklasside näiteid

  • Automaatne salvestusklass C-s
  • Väline salvestusklass C-s
    • Esimene fail: main.c
    • Teine fail: originaal. C
  • Staatiline salvestusklass C-s
  • Registreerige hoiuklass C-s

Automaatne salvestusklass C-s

Automaatse salvestamise klassi abil määratletud muutujaid nimetatakse kohalikeks muutujateks. Auto tähistab automaatset salvestusklassi. Muutuja on vaikimisi automaatse salvestamise klassis, kui see pole sõnaselgelt määratud.

Automaatse muutuja ulatus on piiratud ainult konkreetse plokiga. Kui juhtplokk väljub, hävitatakse juurdepääs. See tähendab, et sellele pääseb juurde ainult see plokk, milles automaatne muutuja deklareeritakse.

Automaatse salvestusklassi määratlemiseks kasutatakse märksõna auto. Vaikimisi sisaldab automaatne muutuja prügiväärtust.

Example, auto int age;

Allpool olev programm määratleb funktsiooni, millel on kaks lokaalset muutujat

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

Võtame teise programmi, mis näitab üksteisest sõltumatult kõigi plokkide automaatmuutujate ulatuse taset "nähtavuse tase":

#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ÄLJUND:

 3 2 1 

Väline salvestusklass C-s

Extern tähistab välist mäluklassi. Välist mäluklassi kasutatakse siis, kui meil on globaalsed funktsioonid või muutujad, mis on jagatud kahe või enama faili vahel.

Märksõna välist kasutatakse globaalse muutuja või funktsiooni deklareerimiseks teises failis, et anda viide muutujale või funktsioonile, mis on juba originaalfailis määratletud.

Välise märksõna abil määratletud muutujaid nimetatakse globaalseteks muutujateks. Need muutujad on kogu programmis ligipääsetavad. Pange tähele, et välist muutujat ei saa lähtestada, see on juba algses failis määratletud.

Example, extern void display();

Esimene fail: main.c

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

Teine fail: originaal. C

#include i=48;

Tulemus:

 value of the external integer is = 48

Ülaltoodud koodi kompileerimiseks ja käitamiseks toimige järgmiselt

1. samm. Looge uus projekt,

  1. Valige Konsoolirakendus
  2. Klõpsake nuppu Mine

Samm 2) Valige C ja klõpsake nuppu Edasi

Samm 3) Klõpsake nuppu Edasi

Samm 4) Sisestage üksikasjad ja klõpsake nuppu Edasi

Samm 5) Klõpsake nuppu Lõpeta

Samm 6) Pange põhikood, nagu on näidatud eelmises programmis, faili main.c ja salvestage see

Samm 7) Looge uus C-fail [File -> new -> Empty File, save (as original.c) ja lisage see praegusesse projekti, klõpsates dialoogiboksis nuppu "OK".

8. samm. Pange ja salvestage eelmises näites näidatud faili original.c C-kood ilma funktsioonita main ().

9. samm. Ehitage ja käivitage oma projekt. Tulemus on näidatud järgmisel joonisel

Staatiline salvestusklass C-s

Staatilisi muutujaid kasutatakse funktsiooni / faili sees kohalike staatiliste muutujatena. Neid saab kasutada ka globaalse muutujana

  • Staatiline lokaalne muutuja on lokaalne muutuja, mis säilitab ja salvestab oma väärtuse funktsioonikutsete või ploki vahel ning jääb nähtavaks ainult funktsioonile või plokile, milles see on määratletud.
  • Staatilised globaalsed muutujad on globaalsed muutujad, mis on nähtavad ainult failile, milles see on deklareeritud.
Example: static int count = 10;

Pidage meeles, et staatilisel muutujal on algne vaikeväärtus null ja see lähtestatakse selle elu jooksul ainult üks kord.

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

Tulemus:

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

Üldised muutujad on kättesaadavad kogu failis, staatilised muutujad aga ainult koodi konkreetsele osale.

Staatilise muutuja eluiga on kogu programmi koodis. Staatilise märksõna abil deklareeritud või initsialiseeritud muutuja sisaldab vaikeväärtusena alati nulli.

Registreerige hoiuklass C-s

Registreerimisklassi saate kasutada, kui soovite muutujate kiireks juurdepääsuks salvestada kohalikud muutujad RAM-i asemel protsessorite registritesse funktsioonide või plokkide sisse. Näiteks "loendurid" on hea kandidaat, mida registrisse salvestada.

Example: register int age;

Märksõna registris kasutatakse kuulutada registri säilitamise klassi. Registrimäluklassi abil deklareeritud muutujate eluiga on kogu programm.

See sarnaneb automaatse salvestamise klassiga. Muutuja on piiratud konkreetse plokiga. Ainus erinevus on see, et registrimäluklassi abil deklareeritud muutujad salvestatakse mälu asemel protsessori registritesse. Registeril on kiirem juurdepääs kui põhimälul.

Registrimäluklassi abil deklareeritud muutujatel pole vaikeväärtust. Need muutujad deklareeritakse sageli programmi alguses.

#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ÄLJUND:

error: address of register variable 'weight' requested

Järgmine tabel võtab kokku iga salvestusklassi põhijooned, mida tavaliselt kasutatakse C-programmeerimisel

Ladustamisklass Deklaratsioon Ladustamine Vaikimisi algväärtus Reguleerimisala Eluaeg
automaatne Funktsiooni / ploki sees Mälu Ettearvamatu Funktsiooni / ploki piires Funktsiooni / ploki piires
Registreeri Funktsiooni / ploki sees CPU registrid Prügi Funktsiooni / ploki piires Funktsiooni / ploki piires
välimine Väljaspool kõiki funktsioone Mälu Null Sisestage fail ja muud failid, kus muutuja deklareeritakse välisena programmi käitusaeg
Staatiline (kohalik) Funktsiooni / ploki sees Mälu Null Funktsiooni / ploki piires programmi käitusaeg
Staatiline (globaalne) Väljaspool kõiki funktsioone Mälu Null Ülemaailmne programmi käitusaeg

Kokkuvõte

Selles õpetuses oleme arutanud ladustamisklasse C-s:

  • Muutuja kohta lisateabe esitamiseks kasutatakse C-tüüpi salvestusklassi.
  • Salvestusklass tähistab muutuja ulatust ja eluiga.
  • Samuti ütleb see, kes ja kust saab muutujale juurde?
  • Automaatne, välimine, register, staatiline on C-programmi neli erinevat salvestusklassi.
  • Muutujate, funktsioonide ja parameetrite määratlemiseks kasutatakse C-keeles salvestusklassi täpsustajat.
  • autot kasutatakse plokis või funktsioonis määratletud kohaliku muutuja jaoks
  • registrit kasutatakse muutuja salvestamiseks protsessori registritesse pigem mälu asukohta kiireks juurdepääsuks.
  • Staatilist kasutatakse nii globaalsete kui ka lokaalsete muutujate jaoks. Igal neist on oma C-programmi raames kasutatav juhtum.
  • Externit kasutatakse andmete jagamiseks C-projekti failide vahel.