Klase pohrane u C: automatski, vanjski, statički, klasa registra u C

Sadržaj:

Anonim

Što je klasa pohrane u C-u?

Klasa pohrane predstavlja vidljivost i mjesto varijable. Kaže iz kojeg dijela koda možemo pristupiti varijabli. Klasa pohrane u C koristi se za opis sljedećih stvari:

  • Promjenjivi opseg.
  • 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 vrstom podataka, njegovom vrijednošću, već i s klasi pohrane.

Postoje ukupno četiri vrste standardnih klasa pohrane. Tablica u nastavku predstavlja klase pohrane u C.

Klasa skladištenja Svrha
auto To je zadana klasa za pohranu.
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.
Registar To je varijabla koja je pohranjena unutar Registra.

U ovom C tutorialu naučit ćete različite vrste klasa pohrane u C s primjerima-

  • Klasa automatskog pohranjivanja u C
  • Vanjska klasa skladišta u C
    • Prva datoteka: main.c
    • Druga datoteka: original.c
  • Statička klasa za pohranu u C
  • Registrirajte klasu pohrane u C

Klasa automatskog pohranjivanja u C

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

Opseg automatske varijable ograničen je samo na određeni blok. Jednom kada kontrola izađe iz bloka, pristup se uništava. To znači da mu može pristupiti samo blok u kojem je deklarirana automatska varijabla.

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

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

Uzmemo drugi program koji prikazuje razinu opsega "razina vidljivosti" za automatske varijable u svakom blokovskom kodu koje su međusobno neovisno:

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

IZLAZ:

 3 2 1 

Vanjska klasa skladišta u C

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

Ključna riječ extern koristi se za deklariranje globalne varijable ili funkcije u drugoj datoteci kako bi se pružila referenca varijable ili funkcije koje su već definirane u izvornoj datoteci.

Varijable definirane pomoću ključne riječi extern nazivaju se globalnim varijablama. Te su varijable dostupne u cijelom programu. Primijetite da se vanjska varijabla ne može inicijalizirati već je definirana u izvornoj datoteci.

Example, extern void display();

Prva datoteka: main.c

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

Druga datoteka: original.c

#include i=48;

Proizlaziti:

 value of the external integer is = 48

Da biste kompilirali i pokrenuli gornji kod, slijedite korake u nastavku

Korak 1) Stvorite novi projekt,

  1. Odaberite Aplikacija konzole
  2. Kliknite Idi

Korak 2) Odaberite C i kliknite Dalje

Korak 3) Kliknite Dalje

Korak 4) Unesite detalje i kliknite Dalje

Korak 5) Kliknite Završi

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

Korak 7) Stvorite novu C datoteku [File -> new -> Empty File, spremite (kao original.c) i dodajte je u trenutni projekt klikom na "OK" u dijaloškom okviru.

Korak 8) Stavite i spremite C kôd datoteke original.c prikazanu u prethodnom primjeru bez funkcije main ().

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

Statička klasa za pohranu 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 globalne varijable vidljive samo datoteci u kojoj su deklarirane.
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 vijeku trajanja.

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

Proizlaziti:

iteration=14 and counter= 7iteration=15 and counter= 8iteration=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 nalazi se u cijelom programskom kodu. Varijabla koja je deklarirana ili inicijalizirana pomoću statičke ključne riječi uvijek sadrži nulu kao zadanu vrijednost.

Registrirajte klasu pohrane u C

Klasu pohrane registra možete koristiti kada želite pohraniti lokalne varijable unutar funkcija ili blokova u CPU registre umjesto RAM-a da biste imali brzi pristup tim varijablama. Na primjer, "brojači" su dobar kandidat za pohranu u registar.

Example: register int age;

Ključna riječ register koristi se za deklariranje klase pohrane registra. Varijable deklarirane uporabom klase za pohranu registra imaju životni vijek tijekom cijelog programa.

Slična je klasi automatske pohrane. Varijabla je ograničena na određeni blok. Jedina je razlika u tome što se varijable deklarirane uporabom klase za pohranu registra spremaju u CPU registre umjesto u memoriju. Registar ima brži pristup od pristupa glavnoj memoriji.

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

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

IZLAZ:

error: address of register variable 'weight' requested

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

Klasa skladištenja Izjava Skladištenje Zadana početna vrijednost Opseg Doživotno
auto Unutar funkcije / bloka Memorija Nepredvidljivo Unutar funkcije / bloka Unutar funkcije / bloka
Registar Unutar funkcije / bloka Registri CPU-a Smeće Unutar funkcije / bloka Unutar funkcije / bloka
vanjski Izvan svih funkcija Memorija Nula Cijela datoteka i ostale datoteke u kojima je varijabla deklarirana kao eksterna vrijeme izvođenja programa
Statički (lokalni) Unutar funkcije / bloka Memorija Nula Unutar funkcije / bloka vrijeme izvođenja programa
Statički (globalno) Izvan svih funkcija Memorija Nula Globalno vrijeme izvođenja programa

Sažetak

U ovom uputstvu raspravljali smo o klasama pohrane u C, da sumiramo:

  • Klasa pohrane u C 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 su četiri različite klase pohrane u programu C.
  • Specifikator klase memorije na jeziku C koristi se za definiranje varijabli, funkcija i parametara.
  • auto se koristi za lokalnu varijablu definiranu unutar bloka ili funkcije
  • register koristi se za pohranu varijable u CPU registre, a ne memorijsko mjesto za brzi pristup.
  • Statička se koristi i za globalne i za lokalne varijable. Svaka ima svoj slučaj upotrebe u programu C.
  • Extern se koristi za razmjenu podataka između datoteka C projekta.