Uzglabāšanas klases C: auto, extern, static, reģistru klase C

Satura rādītājs:

Anonim

Kas ir uzglabāšanas klase C?

Krātuves klase norāda mainīgā redzamību un atrašanās vietu. Tas stāsta, no kuras koda daļas mēs varam piekļūt mainīgajam. Krātuves klase C tiek izmantota, lai aprakstītu šādas lietas:

  • Mainīgā darbības joma.
  • Vieta, kur mainīgais tiks saglabāts.
  • Mainīgā inicializētā vērtība.
  • Mainīgā mūža ilgums.
  • Kas var piekļūt mainīgajam?

Tādējādi uzglabāšanas klase tiek izmantota, lai attēlotu informāciju par mainīgo.

PIEZĪME. Mainīgais ir saistīts ne tikai ar datu tipu, tā vērtību, bet arī ar krātuves klasi.

Kopumā ir četri standarta glabāšanas klases veidi. Zemāk esošajā tabulā ir norādītas uzglabāšanas klases C

Uzglabāšanas klase Mērķis
auto Tā ir noklusējuma krātuves klase.
ārpuse Tas ir globāls mainīgais.
statisks Tas ir lokāls mainīgais, kas spēj atgriezt vērtību pat tad, kad vadība tiek pārsūtīta uz funkcijas izsaukumu.
reģistrēties Tas ir mainīgais, kas tiek glabāts reģistrā.

Šajā C apmācībā jūs uzzināsiet dažāda veida krātuves klases C ar piemēriem

  • Automātiskās glabāšanas klase C
  • Ārējās glabāšanas klase C
    • Pirmais fails: main.c
    • Otrais fails: oriģināls. C
  • Statiskās uzglabāšanas klase C
  • Reģistrējiet krātuves klasi C

Automātiskās glabāšanas klase C

Mainīgos, kas definēti, izmantojot automātiskās glabāšanas klasi, sauc par lokālajiem mainīgajiem. Auto apzīmē automātiskās uzglabāšanas klasi. Mainīgais pēc noklusējuma atrodas automātiskās glabāšanas klasē, ja tas nav skaidri norādīts.

Automātiskā mainīgā darbības joma ir ierobežota tikai ar konkrēto bloku. Kad vadība iziet ārpus bloka, piekļuve tiek iznīcināta. Tas nozīmē, ka tikai bloks, kurā tiek deklarēts automātiskais mainīgais, var tam piekļūt.

Automātiskās glabāšanas klases definēšanai tiek izmantots atslēgvārds auto. Pēc noklusējuma automātiskais mainīgais satur atkritumu vērtību.

Example, auto int age;

Zemāk esošajā programmā ir definēta funkcija, kurai ir divi lokālie mainīgie

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

Mēs izmantojam citu programmu, kas parāda automātisko mainīgo darbības jomas līmeni “redzamības līmenis” katrā bloka kodā, kuri ir neatkarīgi viens no otra:

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

REZULTĀTS:

 3 2 1 

Ārējās glabāšanas klase C

Extern nozīmē ārējās atmiņas klasi. Ārējā glabāšanas klase tiek izmantota, ja mums ir globālas funkcijas vai mainīgie, kas tiek koplietoti starp diviem vai vairākiem failiem.

Atslēgvārda ārējais tiek izmantots, lai deklarētu globālo mainīgo vai funkciju citā failā, lai sniegtu atsauci uz mainīgo vai funkciju, kas jau ir definēts sākotnējā failā.

Mainīgos, kas definēti, izmantojot ārējo atslēgvārdu, sauc par globālajiem mainīgajiem. Šie mainīgie ir pieejami visā programmā. Ievērojiet, ka ārējo mainīgo nevar inicializēt, tas jau ir definēts sākotnējā failā.

Example, extern void display();

Pirmais fails: main.c

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

Otrais fails: oriģināls. C

#include i=48;

Rezultāts:

 value of the external integer is = 48

Lai apkopotu un palaistu iepriekš minēto kodu, veiciet tālāk norādītās darbības

1. darbība. Izveidojiet jaunu projektu,

  1. Atlasiet Console Application
  2. Noklikšķiniet uz Go

2. solis) Atlasiet C un noklikšķiniet uz Tālāk

3. solis) Noklikšķiniet uz Tālāk

4. solis) Ievadiet informāciju un noklikšķiniet uz Tālāk

5. solis) Noklikšķiniet uz Pabeigt

6. solis) Ievietojiet galveno kodu, kā parādīts iepriekšējā programmā, failā main.c un saglabājiet to

7. solis) Izveidojiet jaunu C failu [File -> new -> Empty File, save (as original.c) un pievienojiet to pašreizējam projektam, dialoglodziņā noklikšķinot uz "OK".

8. solis. Ievietojiet un saglabājiet iepriekšējā piemērā parādītā faila original.c C kodu bez galvenās () funkcijas.

9. solis. Veidojiet un vadiet savu projektu. Rezultāts ir parādīts nākamajā attēlā

Statiskās uzglabāšanas klase C

Statiskie mainīgie tiek izmantoti funkcijā / failā kā lokālie statiskie mainīgie. Tos var izmantot arī kā globālo mainīgo

  • Statiskais lokālais mainīgais ir lokāls mainīgais, kas saglabā un saglabā vērtību starp funkciju izsaukumiem vai blokiem un paliek redzams tikai tai funkcijai vai blokam, kurā tas ir definēts.
  • Statiskie globālie mainīgie ir globālie mainīgie, kas ir redzami tikai failam, kurā tas ir deklarēts.
Example: static int count = 10;

Paturiet prātā, ka statiskajam mainīgajam ir noklusējuma sākotnējā vērtība nulle un tas tiek inicializēts tikai vienu reizi tā dzīves laikā.

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

Rezultāts:

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

Globālie mainīgie ir pieejami visā failā, savukārt statiskie mainīgie ir pieejami tikai konkrētajai koda daļai.

Statiskā mainīgā mūža ilgums ir visā programmas kodā. Mainīgais, kas tiek deklarēts vai inicializēts, izmantojot statisko atslēgvārdu, kā noklusējuma vērtību vienmēr satur nulli.

Reģistrējiet krātuves klasi C

Lai ātri piekļūtu šiem mainīgajiem, reģistra krātuves klasi varat izmantot, ja vietējo mainīgo lielumus vēlaties glabāt centrālā procesora reģistru funkcijās vai blokos, nevis RAM. Piemēram, "skaitītāji" ir labs kandidāts, kas jāglabā reģistrā.

Example: register int age;

Atslēgvārdu reģistrs tiek izmantots reģistru glabāšanas klases deklarēšanai. Mainīgajiem, kas deklarēti, izmantojot reģistru glabāšanas klasi, ir kalpošanas laiks visā programmā.

Tas ir līdzīgs automātiskās glabāšanas klasei. Mainīgais ir ierobežots līdz konkrētajam blokam. Vienīgā atšķirība ir tā, ka mainīgie, kas deklarēti, izmantojot reģistra glabāšanas klasi, tiek glabāti CPU reģistros atmiņas vietā. Reģistram ir ātrāka piekļuve nekā galvenajai atmiņai.

Mainīgajiem, kas deklarēti, izmantojot reģistra krātuves klasi, nav noklusējuma vērtības. Šie mainīgie bieži tiek deklarēti programmas sākumā.

#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*/}}

REZULTĀTS:

error: address of register variable 'weight' requested

Nākamajā tabulā ir apkopotas katras atmiņas klases galvenās iezīmes, kuras parasti izmanto C programmēšanā

Uzglabāšanas klase Deklarācija Uzglabāšana Sākotnējā noklusējuma vērtība Darbības joma Mūžs
auto Funkcijas / bloka iekšpusē Atmiņa Neparedzams Funkcijas / bloka ietvaros Funkcijas / bloka ietvaros
reģistrēties Funkcijas / bloka iekšpusē CPU reģistri Atkritumi Funkcijas / bloka ietvaros Funkcijas / bloka ietvaros
ārpuse Ārpus visām funkcijām Atmiņa Nulle Ievietojiet failu un citus failus, kur mainīgais ir deklarēts kā ārējs programmas izpildlaiks
Statiskā (vietējā) Funkcijas / bloka iekšpusē Atmiņa Nulle Funkcijas / bloka ietvaros programmas izpildlaiks
Statisks (globāls) Ārpus visām funkcijām Atmiņa Nulle Globāls programmas izpildlaiks

Kopsavilkums

Šajā apmācībā mēs esam apsprieduši glabāšanas klases C, apkopojot:

  • Krātuves klase C tiek izmantota, lai attēlotu papildu informāciju par mainīgo.
  • Krātuves klase norāda mainīgā darbības jomu un kalpošanas laiku.
  • Tas arī norāda, kurš un no kurienes var piekļūt mainīgajam?
  • Auto, extern, register, static ir četras dažādas atmiņas klases C programmā.
  • Krātuves klases specifikators C valodā tiek izmantots, lai definētu mainīgos, funkcijas un parametrus.
  • auto tiek izmantots lokālam mainīgajam, kas definēts blokā vai funkcijā
  • register tiek izmantots, lai mainīgo saglabātu CPU reģistros, drīzāk atmiņas vietā, lai ātri piekļūtu.
  • Statisko izmanto gan globālajiem, gan lokālajiem mainīgajiem. Katram no tiem ir savs lietošanas gadījums C programmā.
  • Extern tiek izmantots datu koplietošanai starp C projekta failiem.