Klase pohrane u C-u: Auto, Extern, Static, Register (Primjeri)

Što je klasa pohrane u C-u?

Klasa pohrane predstavlja vidljivost i lokaciju varijable. On govori iz kojeg dijela koda možemo pristupiti varijabli. Klasa pohrane u C-u koristi se za opisivanje sljedećih stvari:

  • Opseg varijable.
  • Mjesto gdje će varijabla biti pohranjena.
  • Inicijalizirana vrijednost varijable.
  • Životni vijek varijable.
  • Tko može pristupiti varijabli?

Stoga se klasa pohrane koristi za predstavljanje informacija o varijabli.

NAPOMENA: Varijabla nije povezana samo s a tip podataka, njegovu vrijednost, ali i klasu skladištenja.

Koje su vrste klasa pohrane u C-u?

Postoje ukupno četiri vrste standardnih klasa skladištenja. Donja tablica predstavlja klase pohrane u C.

Klasa skladištenja Svrha
automobil To je zadana klasa pohrane.
vanjski To je globalna varijabla.
statički To je lokalna varijabla koja može vratiti vrijednost čak i kada se kontrola prenese na poziv funkcije.
Registrirajte se To je varijabla koja je pohranjena unutar registra.

Klasa automatskog skladištenja u C

Varijable definirane pomoću klase automatskog pohranjivanja nazivaju se lokalnim varijablama. Auto označava klasu automatskog skladištenja. Varijabla je prema zadanim postavkama u klasi automatske pohrane ako nije eksplicitno navedena.

Opseg automatske varijable ograničen je samo određenim blokom. Jednom kada kontrola izađe iz bloka, pristup je uništen. To znači da joj samo blok u kojem je deklarirana auto varijabla može pristupiti.

Ključna riječ auto koristi se za definiranje klase automatske pohrane. Prema zadanim postavkama, automatska varijabla sadrži nepotrebnu vrijednost.

Example, auto int age;

Program u nastavku definira funkciju s dvije lokalne varijable

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

Uzimamo drugi program koji pokazuje razinu opsega "razinu vidljivosti" za automatske varijable u svakom blok kodu koje su neovisne jedna o drugoj:

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

IZLAZ:

 3 2 1

Vanjska klasa pohrane u C

Extern označava klasu vanjske pohrane. Klasa vanjske pohrane koristi se kada imamo globalne funkcije ili varijable koje dijele dvije ili više datoteka.

Riječ vanjski koristi se za deklariranje globalne varijable ili funkcije u drugoj datoteci za pružanje reference varijable ili funkcije koja je već definirana u izvornoj datoteci.

Varijable definirane pomoću ključne riječi extern nazivaju se globalne varijable. Ove varijable su dostupne u cijelom programu. Primijetite da se eksterna varijabla ne može inicijalizirati jer je već definirana u izvornoj datoteci.

Example, extern void display();

Prva datoteka: main.c

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

Druga datoteka: original.c

#include <stdio.h>
i=48;

Rezultat:

 value of the external integer is = 48


Kako biste kompajlirali i pokrenuli gornji kod, slijedite korake u nastavku

Korak 1) Napravi novi projekt,

  1. Odaberite Konzolnu aplikaciju
  2. Pritisnite Idi

Vanjska klasa pohrane u C

Korak 2) Odaberite C i kliknite Dalje

Vanjska klasa pohrane u C

Korak 3) Kliknite Dalje

Vanjska klasa pohrane u C

Korak 4) Unesite detalje i kliknite Dalje

Vanjska klasa pohrane u C

Korak 5) Kliknite Završi

Vanjska klasa pohrane u C

Korak 6) Stavite glavni kod kao što je prikazano u prethodnom programu u datoteku main.c i spremite ga

Vanjska klasa pohrane u C

Korak 7) Napravite novu C datoteku [Datoteka -> Nova -> Prazna datoteka, spremite (kao original.c) i dodajte je trenutnom projektu klikom na “OK” u dijaloškom okviru.

Vanjska klasa pohrane u C

Korak 8) Stavite i spremite C kod originalne.c datoteke prikazane u prethodnom primjeru bez funkcije main().

Vanjska klasa pohrane u C

Korak 9) Izgradite i pokrenite svoj projekt. Rezultat je prikazan na sljedećoj slici

Vanjska klasa pohrane u C

Statička klasa pohrane u C

Statičke varijable koriste se unutar funkcije/datoteke kao lokalne statičke varijable. Također se mogu koristiti kao globalna varijabla

  • Statička lokalna varijabla je lokalna varijabla koja zadržava i pohranjuje svoju vrijednost između poziva funkcije ili bloka i ostaje vidljiva samo funkciji ili bloku u kojem je definirana.
  • Statičke globalne varijable su vidljive globalne varijable samo na datoteku u kojoj je deklarirana.
Example: static int count = 10;

Imajte na umu da statička varijabla ima zadanu početnu vrijednost nula i inicijalizira se samo jednom u svom životnom vijeku.

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

Rezultat:

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

Globalne varijable dostupne su u cijeloj datoteci, dok su statičke varijable dostupne samo određenom dijelu koda.

Životni vijek statičke varijable je u cijelom programskom kodu. Varijabla koja je deklarirana ili inicijalizirana korištenjem statičke ključne riječi uvijek sadrži nulu kao zadanu vrijednost.

Registrirajte klasu pohrane u C

Klasu pohrane registara možete koristiti kada želite pohraniti lokalne varijable unutar funkcija ili blokova u CPU registrima umjesto RAM kako bi imali brzi pristup ovim varijablama. Na primjer, "brojači" su dobar kandidat za pohranu u registar.

Example: register int age;

Ključna riječ Registrirajte se koristi se za deklariranje klase pohrane registra. Varijable deklarirane pomoću klase pohrane registra imaju životni vijek kroz cijeli program.

Slično je klasi automatskog skladištenja. Varijabla je ograničena na određeni blok. Jedina je razlika u tome što se varijable deklarirane pomoću klase pohrane registara pohranjuju unutar CPU registara umjesto u memoriju. Registar ima brži pristup od onog glavne memorije.

Varijable deklarirane pomoću klase pohrane registara nemaju zadanu vrijednost. Ove se varijable često deklariraju na početku programa.

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

IZLAZ:

error: address of register variable 'weight' requested

Sljedeća tablica sažima glavne značajke svake klase pohrane koja se obično koristi u C programiranju

Klasa skladištenja izjava Kutije za pohranu Zadana početna vrijednost Djelokrug Život
automobil Unutar funkcije/bloka memorija Nepredvidljiv Unutar funkcije/bloka Unutar funkcije/bloka
Registrirajte se Unutar funkcije/bloka CPU registri Smeće Unutar funkcije/bloka Unutar funkcije/bloka
vanjski Izvan svih funkcija memorija nula Cijela datoteka i druge datoteke u kojima je varijabla deklarirana kao extern vrijeme izvođenja programa
Statički (lokalni) Unutar funkcije/bloka memorija nula Unutar funkcije/bloka vrijeme izvođenja programa
Statički (globalni) Izvan svih funkcija memorija nula Globalan vrijeme izvođenja programa

rezime

U ovom smo vodiču raspravljali o klasama pohrane u C-u, da sažmemo:

  • Klasa pohrane u C-u koristi se za predstavljanje dodatnih informacija o varijabli.
  • Klasa pohrane predstavlja opseg i životni vijek varijable.
  • Također govori tko može pristupiti varijabli i odakle?
  • Auto, extern, register, static četiri su različite klase pohrane u C programu.
  • Specifikator klase pohrane u C jezik koristi se za definiranje varijabli, funkcija i parametara.
  • auto se koristi za lokalnu varijablu definiranu unutar bloka ili funkcije
  • registar se koristi za pohranjivanje varijabli u registre CPU-a umjesto memorijske lokacije za brzi pristup.
  • Statički se koristi i za globalne i za lokalne varijable. Svaki od njih ima svoj slučaj upotrebe unutar C programa.
  • Extern se koristi za dijeljenje podataka između C projektnih datoteka.