Š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:
#includeint 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
#includeextern i;main() {printf("value of the external integer is = %d\n", i);return 0;}
Druga datoteka: original.c
#includei=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,
- Odaberite Aplikacija konzole
- 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.