Mikä on C-luokan säilytysluokka?
Tallennusluokka edustaa muuttujan näkyvyyttä ja sijaintia. Se kertoo mistä koodin osasta voimme käyttää muuttujaa. C: n varastoluokkaa käytetään kuvaamaan seuraavia asioita:
- Vaihteleva laajuus.
- Muuttujan tallennuspaikka.
- Muuttujan alustusarvo.
- Muuttujan käyttöikä.
- Kuka voi käyttää muuttujaa?
Siten tallennusluokkaa käytetään edustamaan muuttujaa koskevia tietoja.
HUOMAUTUS: Muuttuja ei liity vain tietotyyppiin, sen arvoon, vaan myös tallennusluokkaan.
Vakiotallennusluokkia on kaikkiaan neljää tyyppiä. Alla olevassa taulukossa esitetään C-luokan varastoluokat.
Varastoluokka | Tarkoitus |
auto | Se on oletustallennusluokka. |
ulkoinen | Se on globaali muuttuja. |
staattinen | Se on paikallinen muuttuja, joka pystyy palauttamaan arvon myös silloin, kun ohjaus siirretään toimintokutsulle. |
rekisteröidy | Se on muuttuja, joka on tallennettu rekisteriin. |
Tässä C-opetusohjelmassa opit erityyppisiä tallennusluokkia C: ssä esimerkkien avulla-
- Automaattivarastoluokka C.
- Ulkoinen säilytysluokka C.
- Ensimmäinen tiedosto: main.c
- Toinen tiedosto: alkuperäinen. C
- Staattinen varastoluokka C.
- Rekisteröi varastoluokka C: hen
Automaattivarastoluokka C.
Automaattivarastoluokan avulla määriteltyjä muuttujia kutsutaan paikallisiksi muuttujiksi. Auto tarkoittaa automaattista varastoluokkaa. Muuttuja on oletuksena automaattisen tallennustilan luokassa, ellei sitä ole erikseen määritelty.
Automaattimuuttujan soveltamisala on rajoitettu vain tietylle lohkolle. Kun ohjaus menee ulos lohkosta, pääsy tuhoutuu. Tämä tarkoittaa, että vain lohko, jossa automaattinen muuttuja ilmoitetaan, voi käyttää sitä.
Avainsanalla auto määritetään automaattisen tallennustilan luokka. Oletusarvoisesti automaattinen muuttuja sisältää roska-arvon.
Example, auto int age;
Alla oleva ohjelma määrittelee toiminnon, jolla on kaksi paikallista muuttujaa
int add(void) {int a=13;auto int b=48;return a+b;}
Otamme toisen ohjelman, joka näyttää kunkin lohkokoodin automaattisten muuttujien laajuuden "näkyvyysaste", jotka ovat toisistaan riippumattomasti:
#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);}
LÄHTÖ:
3 2 1
Ulkoinen säilytysluokka C.
Extern tarkoittaa ulkoista varastoluokkaa. Ulkoista tallennustilaluokkaa käytetään, kun meillä on globaaleja toimintoja tai muuttujia, jotka jaetaan kahden tai useamman tiedoston välillä.
Avainsanan ulkoa käytetään ilmoittamaan yleinen muuttuja tai funktio toisessa tiedostossa antamaan muuttujan tai funktion viite, joka on jo määritelty alkuperäisessä tiedostossa.
Ulkoisella avainsanalla määriteltyjä muuttujia kutsutaan globaaleiksi muuttujiksi. Nämä muuttujat ovat käytettävissä koko ohjelmassa. Huomaa, että ulkoista muuttujaa ei voida alustaa, se on jo määritelty alkuperäisessä tiedostossa.
Example, extern void display();
Ensimmäinen tiedosto: main.c
#includeextern i;main() {printf("value of the external integer is = %d\n", i);return 0;}
Toinen tiedosto: alkuperäinen. C
#includei=48;
Tulos:
value of the external integer is = 48
Noudata seuraavia ohjeita kääntääksesi yllä olevan koodin ja ajaaksesi sen
Vaihe 1) Luo uusi projekti,
- Valitse konsolisovellus
- Napsauta Siirry
Vaihe 2) Valitse C ja napsauta Seuraava
Vaihe 3) Napsauta Seuraava
Vaihe 4) Anna tiedot ja napsauta Seuraava
Vaihe 5) Napsauta Valmis
Vaihe 6) Laita pääkoodi edellisen ohjelman mukaisesti main.c-tiedostoon ja tallenna se
Vaihe 7) Luo uusi C-tiedosto [File -> new -> Empty File, save (as original.c) ja lisää se nykyiseen projektiin napsauttamalla "OK" valintaikkunassa.
Vaihe 8) Laita ja tallenna edellisessä esimerkissä esitetyn original.c-tiedoston C-koodi ilman main () -funktiota.
Vaihe 9) Rakenna ja suorita projektisi. Tulos on esitetty seuraavassa kuvassa
Staattinen varastoluokka C.
Staattisia muuttujia käytetään funktion / tiedoston sisällä paikallisin staattisina muuttujina. Niitä voidaan käyttää myös globaalina muuttujana
- Staattinen paikallinen muuttuja on paikallinen muuttuja, joka säilyttää ja tallentaa arvon funktiokutsujen tai lohkon välillä ja pysyy näkyvissä vain funktiolle tai lohkolle, jossa se on määritelty.
- Staattiset globaalimuuttujat ovat globaaleja muuttujia, jotka näkyvät vain tiedostolle, johon se on ilmoitettu.
Example: static int count = 10;
Pidä mielessä, että staattisella muuttujalla on oletusarvo nolla ja se alustetaan vain kerran elinaikanaan.
#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);}
Tulos:
iteration=14 and counter= 7iteration=15 and counter= 8iteration=16 and counter= 9
Globaalit muuttujat ovat käytettävissä koko tiedostossa, kun taas staattiset muuttujat ovat käytettävissä vain tietylle koodin osalle.
Staattisen muuttujan elinikä on koko ohjelmakoodissa. Staattisella avainsanalla ilmoitettu tai alustettu muuttuja sisältää aina nollan oletusarvona.
Rekisteröi varastoluokka C: hen
Voit käyttää rekisteritallennusluokkaa, kun haluat tallentaa paikalliset muuttujat funktioihin tai lohkoihin keskusyksikön rekistereihin RAM-muistin sijaan, jotta pääset nopeasti näihin muuttujiin. Esimerkiksi "laskurit" ovat hyvä ehdokas, joka tallennetaan rekisteriin.
Example: register int age;
Avainsana rekisteriä käytetään julistaa rekisteri varastointi luokassa. Rekisteritallennusluokan avulla ilmoitettujen muuttujien elinikä on koko ohjelma.
Se on samanlainen kuin automaattisen tallennuksen luokka. Muuttuja on rajoitettu tiettyyn lohkoon. Ainoa ero on, että rekisteritallennusluokan avulla ilmoitetut muuttujat tallennetaan CPU-rekistereihin muistin sijaan. Rekisterillä on nopeampi pääsy kuin päämuistilla.
Rekisterimuistiluokalla ilmoitetuilla muuttujilla ei ole oletusarvoa. Nämä muuttujat ilmoitetaan usein ohjelman alussa.
#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*/}}
LÄHTÖ:
error: address of register variable 'weight' requested
Seuraava taulukko esittää yhteenvedon kunkin C-ohjelmoinnissa yleisesti käytetyn tallennusluokan pääominaisuuksista
Varastoluokka | Julistus | Varastointi | Oletusarvo | Soveltamisala | Elinikä |
auto | Toiminnon / lohkon sisällä | Muisti | Arvaamaton | Toiminnon / lohkon sisällä | Toiminnon / lohkon sisällä |
rekisteröidy | Toiminnon / lohkon sisällä | CPU-rekisterit | Roska | Toiminnon / lohkon sisällä | Toiminnon / lohkon sisällä |
ulkoinen | Kaikkien toimintojen ulkopuolella | Muisti | Nolla | Kirjoita tiedosto ja muut tiedostot, joissa muuttuja ilmoitetaan ulkoisena | ohjelman ajonaikainen |
Staattinen (paikallinen) | Toiminnon / lohkon sisällä | Muisti | Nolla | Toiminnon / lohkon sisällä | ohjelman ajonaikainen |
Staattinen (globaali) | Kaikkien toimintojen ulkopuolella | Muisti | Nolla | Maailmanlaajuinen | ohjelman ajonaikainen |
Yhteenveto
Tässä opetusohjelmassa olemme keskustelleet tallennustilaluokista C: ssä yhteenvetona:
- Varastoluokkaa C: ssä käytetään edustamaan muuttujaa koskevia lisätietoja.
- Varastoluokka edustaa muuttujan laajuutta ja käyttöikää.
- Se kertoo myös, kuka voi käyttää muuttujaa ja mistä?
- Automaattinen, ulkoinen, rekisteröidy, staattinen ovat neljä erilaista tallennustilaluokkaa C-ohjelmassa.
- C-kielellä olevaa varastoluokan määrittelyä käytetään muuttujien, toimintojen ja parametrien määrittelemiseen.
- autoa käytetään lohkossa tai toiminnossa määriteltyyn paikalliseen muuttujaan
- Rekisteriä käytetään muuttujan tallentamiseen suorittimen rekistereihin pikemminkin muistipaikkaan nopeaa käyttöä varten.
- Staattista käytetään sekä globaaleihin että paikallisiin muuttujiin. Jokaisella on oma käyttötapansa C-ohjelmassa.
- Ulkoa käytetään tietojen jakamiseen C-projektitiedostojen välillä.