C-salvestusklasside sissejuhatus

Kõik väärtused või numbrid tuleb hilisemaks kasutamiseks kuskil hoida, eks? Seda saab teha C muutujate abil. Muutujad on meie programmides kasutatavad salvestusalad. Iga muutuja on kindlat tüüpi, näiteks täisarv, tähemärk, ning sellel on sõltuvalt tüübist ka konkreetne suurus ja paigutus. Igat tüüpi muutujaid tuleks salvestada mälu konkreetsesse ossa ja neil peavad olema piiratud või konkreetsed juurdepääsuõigused. C-tüüpi salvestusklassid määravad, millisesse mäluosa iga muutuja tuleb salvestada, ning otsustab ka muutuja ulatuse (nähtavuse). Salvestusklasse on nelja tüüpi - automaatne, väline, staatiline ja register. Koos muutujaga võib mainida ühte salvestuse täpsust.

C-tüüpi salvestusklasside tüübid

C-tüüpi ladustusklasside tüübid on järgmised

1. Automaatne salvestusklass

Kõik funktsioonis või plokis deklareeritud muutujad salvestatakse vaikimisi autospetsifikaatorisse, isegi kui see pole selgesõnaliselt määratletud. Selle salvestusklassi spetsifikaator on 'auto'. Automaatse salvestusklassi muutujate ulatus või nähtavus on lokaalne määratletud ploki või funktsiooni jaoks. Muutuja hävitatakse, kui funktsioonist või plokist välja tuleme.

Seda saab paremini selgitada näitega. Mõelge allpool toodud näitele:

Kood:

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

Väljund:

4

2

Siin deklareeritakse kõigepealt muutuja I tüüpi täisarv, millele omistatakse väärtus 2. Järgmisena kuulutatakse silmuse või ploki sees sama täisarvutüübi muutuja I väärtusega 4. Kui salvestuse täpsustajat ei mainita, võetakse vaikimisi seda automaatselt. Esimeses printf-avalduses, mida mainitakse ploki sees, prinditakse väärtus 4 väärtuse I printimisel. Seevastu teises printf-avalduses, mida mainitakse väljaspool plokki, prinditakse väärtus I kui 2, väärtus, mis on märgitud väljaspool plokk. Parem on lähtestada mõni väärtus automaatsetele muutujatele, kuna mõnikord on tõenäoline, et prügi väärtus saadakse, kui lähtestamist ei tehta. See näide annab selge pildi automaatsetest muutujatest ja kohalikust ulatusest.

2. Registreeri salvestusklass

Registri salvestusklassis salvestatud muutujatel on ka lokaalne ulatus, mis tähendab, et need on juurdepääsetavad või nähtavad ainult selles plokis, milles need deklareeritakse. See salvestus sarnaneb autoga, kuid peamine erinevus seisneb selles, et automaatsed muutujad salvestatakse mällu, samas kui registrimuutujad salvestatakse CPU registrites. Seda tehakse siis, kui tahame muutujale juurde pääseda väga sageli. Neid saab kiiremini kasutada. Registrimäärajate abil salvestatakse ainult mõned muutujad. Kui registris pole ruumi, salvestatakse see ainult mällu. Registrimuutujatele ei omistata algväärtust. Samuti ei saa operaatori & (aadressi) kasutada registrimuutujatel. Näiteks muutujad, mida kasutatakse loendurite või muude sarnaste kasutustüüpide jaoks, salvestatakse registri spetsifikaatori abil.

3. Staatilise ladustamise klass

Muutujat, olgu see globaalne või lokaalne, salvestatakse staatilise mäluseadme abil staatilises mäluklassis, kui muutuja tuleb üks kord deklareerida ja väärtus tuleb säilitada. Kui muutuja kuulutatakse staatiliseks, siis väärtus salvestatakse või säilitatakse funktsioonikõnede vahel. Luuakse alaline salvestusruum ja seda deklareeritakse ainult üks kord. Kui kohalik muutuja kuulutatakse staatiliseks, luuakse sellele püsiv salvestusruum ja väärtus säilitatakse iga kord, kui seda kasutatakse. Lisaks tavalise kohaliku muutuja ulatusele on staatilised kohalikud muutujad nähtavad ka ainult funktsioonile või plokile, kus see on määratletud. Kui globaalne muutuja kuulutatakse staatiliseks, sarnaselt staatilise lokaalsega, luuakse püsiv salvestusruum ja see deklareeritakse ainult üks kord. Kuid kuigi need on globaalsed, on need muutujad nähtavad ainult selles failis, milles need on määratletud.

Staatilisi muutujaid saab selgelt kujutada, kasutades järgmist näidet:

Kood:

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äljund:

2

4

Ülaltoodud programmis, kui kutsutakse proovifunc (), määratletakse ja lähtestatakse esimest korda muutuja a ning luuakse selle jaoks alaline salvestusruum. Funktsioonis kasutatud matemaatilise avalduse abil saab a väärtus väärtuseks 2. Kuid kui sama valimifunci () nimetatakse teist korda, siis muutujat a ei defineerita ega lähtestata, see võtab pigem viimase säilinud väärtuse ja jätkab operatsiooniga muutes lõpptulemuseks 4. See on staatiliste muutujate peamine kasutusala ja eelis.

4. Väline ladustamisklass

Väliseks kuulutatud muutuja tähistab muutuja määratlemist mujal muus programmis. Neid väliseid muutujaid kasutatakse siis, kui soovime, et mõnda programmis määratletud muutujat või funktsiooni kasutataks ka teises failis. Välise spetsifikaatoriga muutujad salvestatakse välimisse mäluklassi. Kui muutuja kuulutatakse väliseks programmiks, määratleb see välise seose ja seetõttu ei määratleta seda ega lähtestata seda uuesti. Salvestusruum on eraldatud ainult ühele ja ka lähtestatakse ainult üks kord. Kui välised muutujad lähtestatakse välisprogrammis uuesti mõne muu väärtusega, kuvatakse tõrge, märkides muutuja ümberdefineerimise.

Välismuutujaid selgitatakse järgmise näite abil:

Kood:

Prg1.c

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

Prg2.c

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

Väljund:

10

Siin deklareeritakse täisarvumuutujate arv esimeses C-programmis (Prg1.c) ja põhifunktsiooni sees lähtestatakse see väärtuseks 10. Teises C-programmis deklareeritakse sama loendusmuutuja välise spetsifikaatori abil, mis täpsustab, et seal on väline seos ja väärtus tõmmatakse salvestusruumist välja ja väärtus 10 antakse väärtusloendile, kui prindime selle teises programmis. See on väliste muutujate kasutamine. Seega, sõltuvalt erinevast otstarbest, kasutatakse iga salvestusklassi sobivate muutujate jaoks ja see deklareeritakse koos vastavate spetsifikaatoritega.

Soovitatavad artiklid

See on C-salvestusklasside juhend. Siin käsitleme salvestusklasside tüüpe, mis hõlmavad automaatset salvestusklassi, registri salvestusklassi, staatilise salvestusklassi ja välist salvestusklassi. Lisateabe saamiseks võite vaadata ka järgmisi artikleid -

  1. Mis on JavaBeans?
  2. ES6 vs ES5
  3. C ++ vs visuaalne C ++
  4. C vs C ++ jõudlus

Kategooria: