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":
#includeint 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
#includeextern i;main() {printf("value of the external integer is = %d\n", i);return 0;}
Teine fail: originaal. C
#includei=48;
Tulemus:
value of the external integer is = 48
Ülaltoodud koodi kompileerimiseks ja käitamiseks toimige järgmiselt
1. samm. Looge uus projekt,
- Valige Konsoolirakendus
- 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.