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,
- Odaberite Konzolnu aplikaciju
- Pritisnite 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 kod kao što je prikazano u prethodnom programu u datoteku main.c i spremite ga
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.
Korak 8) Stavite i spremite C kod originalne.c datoteke prikazane u prethodnom primjeru bez funkcije main().
Korak 9) Izgradite i pokrenite svoj projekt. Rezultat je prikazan na sljedećoj slici
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.