C-salvestusklassid: automaatne, väline, staatiline, register (näited)

Mis on salvestusklass C?

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

  • Muutuv ulatus.
  • Asukoht, kuhu muutuja salvestatakse.
  • Muutuja algväärtus.
  • Muutuja eluiga.
  • Kes pääseb muutujale juurde?

Seega kasutatakse muutuja kohta teabe esitamiseks salvestusklassi.

MÄRKUS: Muutujat ei seostata ainult a andmetüüp, selle väärtus, aga ka säilitusklass.

Millised on C-s ladustamisklasside tüübid?

Standardseid ladustamisklasse on kokku nelja tüüpi. Allolev tabel esindab salvestusklasse C-s.

Ladustamisklass Eesmärk
auto See on vaikesalvestusklass.
väline See on globaalne muutuja.
staatiline See on kohalik muutuja, mis on võimeline tagastama väärtuse isegi siis, kui juhtimine viiakse üle funktsioonikutsele.
registreerima See on muutuja, mis salvestatakse registrisse.

Autosalvestusklass C-s

Automaatsalvestusklassi abil määratletud muutujaid nimetatakse kohalikeks muutujateks. Auto tähistab automaatset ladustamisklassi. Muutuja on vaikimisi automaatsalvestusklassis, kui see pole selgesõnaliselt määratud.

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

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

Example, auto int age;

Allolev programm määratleb funktsiooni, millel on kaks kohalikku muutujat

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

Võtame teise programmi, mis näitab iga plokikoodi automaatmuutujate ulatuse taset "nähtavus", mis on üksteisest sõltumatud:

#include <stdio.h>
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

Välised alused välise salvestusklassi jaoks. Välist salvestusklassi kasutatakse siis, kui meil on globaalsed funktsioonid või muutujad, mida jagatakse kahe või enama faili vahel.

Võtmesõna väline kasutatakse globaalse muutuja või funktsiooni deklareerimiseks teises failis, et anda viide muutujale või funktsioonile, mis on juba algses failis määratletud.

Välise märksõna abil määratletud muutujaid nimetatakse globaalseteks muutujateks. Need muutujad on kättesaadavad kogu programmi jooksul. Pange tähele, et välist muutujat ei saa lähtestada, see on juba algfailis määratletud.

Example, extern void display();

Esimene fail: main.c

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

Teine fail: original.c

#include <stdio.h>
i=48;

Tulemus:

 value of the external integer is = 48


Ülaltoodud koodi kompileerimiseks ja käitamiseks järgige alltoodud samme

Step 1) Loo uus projekt,

  1. Valige Konsoolirakendus
  2. Klõpsake nuppu Mine

Väline salvestusklass C-s

Step 2) Valige C ja klõpsake nuppu Edasi

Väline salvestusklass C-s

Step 3) Klõpsake nuppu Edasi

Väline salvestusklass C-s

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

Väline salvestusklass C-s

Step 5) Klõpsake nuppu Lõpeta

Väline salvestusklass C-s

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

Väline salvestusklass C-s

Step 7) Looge uus C-fail [Fail -> uus -> Tühjenda fail , salvestage (originaal.c) ja lisage see aktiivsesse projekti, klõpsates dialoogiboksis “OK”.

Väline salvestusklass C-s

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

Väline salvestusklass C-s

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

Väline salvestusklass C-s

Staatiline salvestusklass C-s

Staatilisi muutujaid kasutatakse funktsioonis/failis kohalike staatiliste muutujatena. Neid saab kasutada ka a globaalne muutuja

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

Pidage meeles, et staatilise muutuja vaikealgväärtus on null ja see lähtestatakse ainult üks kord selle eluea jooksul.

#include <stdio.h> /* 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= 7
iteration=15 and counter= 8
iteration=16 and counter= 9

Globaalsed muutujad on juurdepääsetavad kogu faili ulatuses, samas kui staatilised muutujad on juurdepääsetavad ainult koodi konkreetsele osale.

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

Registreerige salvestusklass C-s

Saate kasutada registrisalvestusklassi, kui soovite salvestada kohalikke muutujaid funktsioonide või plokkide sees CPU registrites RAM et neil muutujatel oleks kiire juurdepääs. Näiteks "loendurid" sobivad hästi registrisse salvestamiseks.

Example: register int age;

Märksõna registreerima kasutatakse registri salvestusklassi deklareerimiseks. Registrisalvestusklassi abil deklareeritud muutujatel on kogu programmi eluiga.

See sarnaneb automaatse salvestusklassiga. Muutuja on piiratud konkreetse plokiga. Ainus erinevus seisneb selles, et registrisalvestusklassi abil deklareeritud muutujad salvestatakse mälu asemel CPU registritesse. Registril on kiirem juurdepääs kui põhimälule.

Registrisalvestusklassi abil deklareeritud muutujatel ei ole vaikeväärtust. Need muutujad deklareeritakse sageli programmi alguses.

#include <stdio.h> /* 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ärgmises tabelis on kokkuvõte iga salvestusklassi põhiomadused, mida C-programmeerimises tavaliselt kasutatakse

Säilitusklass deklaratsioon Säilitamine Algne vaikeväärtus Ulatus Eluaegne
auto Funktsiooni/ploki sees Mälu Ettearvamatu Funktsiooni/ploki piires Funktsiooni/ploki piires
registreerima Funktsiooni/ploki sees CPU registrid Prügi Funktsiooni/ploki piires Funktsiooni/ploki piires
väline Väljaspool kõiki funktsioone Mälu Null Kogu fail ja muud failid, kus muutuja on deklareeritud väliseks programmi tööaeg
Staatiline (kohalik) Funktsiooni/ploki sees Mälu Null Funktsiooni/ploki piires programmi tööaeg
Staatiline (ülemaailmne) Väljaspool kõiki funktsioone Mälu Null Globaalne programmi tööaeg

kokkuvõte

Selles õpetuses oleme arutanud C-vormingus salvestusklasse, kokkuvõtteks:

  • C-salvestusklassi kasutatakse muutuja kohta lisateabe esitamiseks.
  • Salvestusklass tähistab muutuja ulatust ja eluiga.
  • Samuti ütleb see, kes ja kust pääseb muutujale juurde?
  • Automaatne, välimine, register, staatiline on C-programmi neli erinevat salvestusklassi.
  • Salvestusklassi määraja C keel kasutatakse muutujate, funktsioonide ja parameetrite määratlemiseks.
  • Auto kasutatakse plokis või funktsioonis määratletud kohaliku muutuja jaoks
  • registrit kasutatakse muutuja salvestamiseks CPU registritesse, mitte mälukohta kiireks juurdepääsuks.
  • Staatilist kasutatakse nii globaalsete kui ka kohalike muutujate jaoks. Igal neist on C-programmis oma kasutusjuht.
  • Externi kasutatakse andmete jagamiseks C-projekti failide vahel.