pointers pointer operations c
Intenzivno proučavanje pokazivača i njihove upotrebe u C ++.
Pokazivač je jedna od najsnažnijih značajki jezika C ++. Pokazivač pomaže u manipulaciji varijablama putem svoje adrese.
najbolji softver za izradu igara za početnike
U ovom uputstvu detaljno ćemo istražiti sve o pokazivačima i njihovoj upotrebi u C ++-u.
=> Ovdje pripazite na jednostavne serije obuke za C ++.
Što ćete naučiti:
- Što je pokazivač?
- Aritmetika pokazivača
- Null And Void pokazivači
- Nizovi i pokazivači
- Niz pokazivača
- Pokazivač pokazivača
- Prosljeđivanje pokazivača na funkcije
- Pokazatelji na funkcije
- Zaključak
- Preporučena literatura
Što je pokazivač?
Pokazivač je varijabla koja sadrži adresu memorijskog mjesta. Znamo da sve varijable koje deklariramo imaju određenu adresu u memoriji. Deklariramo pokazivačku varijablu koja upućuje na ove adrese u memoriji.
Opća sintaksa za deklariranje pokazivačke varijable je:
datatype * variable_name;
Na primjer, deklaracija int * ptr;
To znači da je ptr pokazivač koji pokazuje na varijablu tipa int. Stoga pokazivačka varijabla uvijek sadrži memorijsko mjesto ili adresu. Pogledajmo kako funkcioniraju pokazivačke varijable u nastavku.
Uzmimo u obzir da imamo sljedeće izjave:
Int p, *ptr; //declare variable p and pointer variable ptr p = 4; //assign value 4 to variable p ptr = &p; //assign address of p to pointer variable ptr
U sjećanju će ove izjave biti predstavljene na sljedeći način:
Ovo je unutarnji prikaz pokazivača u memoriji. Kada varijabli adrese dodijelimo varijablu pokazivača, ona usmjerava na varijablu kao što je prikazano u gornjem prikazu.
Kako ptr ima adresu varijable p, * ptr će dati vrijednost varijable p (varijabla na koju pokazuje varijabla pokazivača ptr).
Bilješka: Operator * koji koristimo s pokazivačem koristi se za označavanje da je varijabla pokazivača.
Pogledajmo neke koncepte pokazivača koji se koriste u C ++.
Aritmetika pokazivača
Znamo da varijabla pokazivača uvijek pokazuje na adresu u memoriji. Među operacijama koje možemo izvesti imamo sljedeće aritmetičke operacije koje se izvode na pokazivačima.
- Operator povećanja (++)
- Operator smanjenja (-)
- Zbrajanje (+)
- Oduzimanje (-)
Pogledajmo upotrebu ovih operacija u primjeru programa.
#include #include using namespace std; int main() { int myarray(5) = {2, 4,6, 8,10}; int* myptr; myptr = myarray; cout<<'First element in the array :'<<*myptr< Izlaz:
Prvi element u nizu: 2
sljedeći element u nizu: 4
sljedeći element u nizu: 6
sljedeći element u nizu: 4
sljedeći element u nizu: 2
Vidjeli smo aritmetičke operacije izvedene na pokazivačima. Imajte na umu da operator prirasta ++ povećava pokazivač i pokazuje na sljedeći element u polju. Slično tome, operator smanjenja smanjuje pokazivačku varijablu za 1 tako da pokazuje na prethodni element u polju.
Također koristimo + i - operatore. Prvo smo dodali 1 u varijablu pokazivača. Rezultat pokazuje da pokazuje na sljedeći element u nizu. Slično tome, - operator čini varijablu pokazivača usmjerenom na prethodni element u polju.
Osim ovih aritmetičkih operatora, možemo koristiti i operatore usporedbe poput ==,.
Null And Void pokazivači
Ako u slučaju, varijabli pokazivača nije dodijeljena adresa varijable, tada je dobra praksa dodijeliti NULL vrijednost varijabli pokazivača. Varijabla pokazivača s NULL vrijednošću naziva se NULL pokazivač.
Nulti pokazivač je stalni pokazivač s vrijednošću nula definiranom u zaglavlju iostream. Memoriju na adresi 0 rezervirao je operativni sustav i ne možemo pristupiti tom mjestu.
Korištenjem null pokazivača možemo izbjeći zlouporabu neiskorištenih pokazivača i spriječiti da varijable pokazivača imaju dodijeljene neke vrijednosti smeća.
Prazni pokazivači su posebni pokazivači koji upućuju na vrijednosti bez tipa. Prazni pokazivači su fleksibilniji jer mogu ukazati na bilo koju vrstu. Ali ne mogu se izravno preusmjeriti. Za dereferenciranje, void pokazivač treba pretvoriti u pokazivač koji pokazuje na vrijednost s konkretnim tipom podataka.
Pokazali smo rad pokazivača NULL i void u sljedećem primjeru koda.
#include #include using namespace std; int main() { int intvar = 10; char c = 'A'; void* vptr; int* myptr = NULL; cout<<'NULL pointer value :'< Izlaz:
Vrijednost pokazivača NULL: 0
Pokazivač praznine vptr ukazuje na: A
Prazni pokazivač vptr ukazuje na: 10
U gornjem programu prvo deklariramo cjelobrojni pokazivač kojem je dodijeljena vrijednost NULL. Kada ispisujemo ovaj pokazivač, vidimo da je vrijednost 0 kao što smo ranije raspravljali.
Dalje, proglašavamo praznim pokazivač. Prvo, ovom praznom pokazivaču dodijelimo adresu varijable znaka. Zatim dodijelimo void pokazivač na pokazivač znaka i upišemo ga char *. Dalje, ispisujemo vrijednost charptr koja pokazuje na char A koja je bila varijabla znaka koju smo ranije deklarirali i na koju pokazuje pokazivač void.
Zatim smo dodijelili cijelu varijablu pokazivaču void, a zatim izvodimo iste korake preusmjeravanja ovog void pokazivača pomoću cjelobrojnog pokazivača.
Nizovi i pokazivači
Nizovi i pokazivači čvrsto su povezani jedni s drugima. Znamo da ime niza pokazuje na prvi element u nizu i to je stalni pokazivač.
koja je najbolja aplikacija za preuzimanje glazbe za android
Ovaj pokazivač možemo dodijeliti varijabli pokazivača, a zatim pristupiti nizu dekrementiranjem pokazivača ili pomoću operatora indeksa.
Vidjet ćemo ovu povezanost između varijable pokazivača i niza u sljedećem primjeru koda.
#include #include using namespace std; int main() { int myarray(5) = {1, 1, 2, 3, 5}; int* ptrvar; ptrvar = myarray; for(int i=0;i<5;i++) { cout<<*ptrvar<<' '; ptrvar++; } return 0; }
Izlaz:
1 1 2 3 5
U gornjem programu naziv polja dodjeljujemo pokazivačkoj varijabli. Kako ime niza pokazuje na prvi element u nizu, možemo ispisati sadržaj cijelog niza pomoću varijable pokazivača i povećati ga pomoću operatora ++. To je prikazano u izlazu.
Niz pokazivača
Ponekad nam treba više od jedne varijable pokazivača u programu. Umjesto deklariranja svake pojedine varijable pokazivača, možemo deklarirati niz pokazivača.
Uzmimo odmah primjer kako bismo demonstrirali niz pokazivača.
#include #include using namespace std; int main() { int myarray(5) = {2,4,6,8,10}; int *ptr(5); //array of pointers for(int i=0;i<5;i++){ ptr(i) = &myarray(i); } for (int i = 0; i < 5; i++) { cout << 'Value of myarray(' << i << ') = '; cout << *ptr(i) << endl; } return 0; }
Izlaz:
Vrijednost myarray (0) = 2
Vrijednost myarray (1) = 4
Vrijednost myarray (2) = 6
Vrijednost myarray (3) = 8
Vrijednost myarray (4) = 10
U gornjoj izjavi,
int * ptr (5);
Možemo protumačiti kao; ptr je niz od 5 cjelobrojnih pokazivača. Stoga će svaki element ptr-a ukazivati na varijablu tipa integer.
Koristimo cjelobrojni niz i dodijeljujemo adresu svakog elementa niza svakom od ptr elemenata. Zatim prikazujemo sadržaj niza ptr iznošenjem '* ptr (i)'.
Pokazivač pokazivača
Pokazivač pokazivača nije ništa drugo do višestruka indirektnost. To je svojevrsni lanac pokazivača. Kada definiramo pokazivač pokazivača, prvi pokazivač ima adresu drugog pokazivača, koji pak ima adresu varijable na koju pokazuje.
U sjećanju će to biti prikazano kao:

Pokazivač pokazivača deklarira se na sljedeći način:
int** intptr;
Izravno uzimamo Primjer koda da bismo bolje razumjeli pokazivač pokazivača.
#include #include using namespace std; int main() { int *vptr; int ** intptr; int var = 10; vptr = &var; intptr = &vptr; cout<<'Variable var: '< Izlaz:
Varijabilna var: 10
Pokazivač na varijablu: 10
Pokazivač na Pokazivač na varijablu: 10
U gornjem programu deklariramo cjelobrojnu varijablu, cjelobrojni pokazivač i pokazivač pokazivača na cijeli broj. Kao što je prikazano u programu, pokazivačkoj varijabli dodjeljuje se vrijednost varijable. Pokazivaču varijable pokazivača dodjeljuje se adresa varijable pokazivača.
Na kraju ispisujemo tri varijable koje prikazuju istu vrijednost 10 jednaku cjelobrojnoj varijabli.
Prosljeđivanje pokazivača na funkcije
Prosljeđivanje pokazivača na funkciju isto je kao i ostale tehnike prosljeđivanja parametara u kojima prenosimo varijable pokazivača na funkciju.
Ponovno posjećujemo zamjenu dviju vrijednosti i mijenjamo ga tako da prosljeđuje varijable pokazivača kao parametre.
#include #include using namespace std; void swap(int* a, int* b) { int temp; temp = *a; *a = *b; *b = temp; } int main() { int a, b; cout<>a>>b; cout<<'a = '< Izlaz:
Unesite vrijednosti koje treba zamijeniti: 3 2
a = 3 b = 2
Zamijenjene vrijednosti
a = 2 b = 3
Kao što je prikazano u programu, vrijednosti koje treba zamijeniti prosljeđujemo kao cjelobrojne varijable. Formalni parametri definirani su kao varijable pokazivača. Kao rezultat toga, promjene napravljene na varijablama unutar funkcija odražavaju se vani i u pozivajućoj funkciji.
Pokazatelji na funkcije
na isti način, kako imamo pokazivače na varijable, nizove itd., možemo imati i pokazivače na funkcije. Ali razlika je u tome što pokazivač funkcije pokazuje na izvršni kod, a ne na podatke poput varijabli ili nizova.
Uzimamo primjer za demonstraciju pokazivača na funkciju.
#include #include using namespace std; void displayVal(int a) { printf('Value of a is %d
', a); } int main() { void (*func_ptr)(int) = &displayVal; (*func_ptr)(100); return 0; }
Izlaz:
Vrijednost a je 100
koje su faze životnog ciklusa razvoja softvera
U gornjem programu imamo funkciju ‘displayVal’ koja samo ispisuje cijelu vrijednost koja mu je proslijeđena. U glavnoj funkciji definirali smo pokazivač funkcije ‘func_ptr’ koji uzima int kao argument i vraća tip void.
void (* func_ptr) (int)
Bilješka: Moramo zatvoriti pokazivač funkcije unutar (). Ako ga izostavimo, postat će prototip funkcije.
Ovom smo pokazivaču funkcije dodijelili adresu funkcije ‘displayVal’. Zatim pomoću ovog pokazivača funkcije 'func_ptr' prosljeđujemo vrijednost argumenta 100 koja je ekvivalent pozivanju displayVal s argumentom 100.
Sada ako imamo drugu funkciju s istim prototipom, tada možemo koristiti isti pokazivač funkcije tako što ćemo mu dodijeliti adresu funkcije. Ovo je glavna upotreba pokazivača na funkcije.
Zaključak
Ovo je sve o pokazivačima, njihovim definicijama i korištenju u C ++.
U sljedećem uputstvu naučit ćemo više o referencama na C ++. Reference se također posebno koriste u jeziku C ++ i često se koriste kao aliasi za varijable.
=> Kliknite ovdje za apsolutnu seriju C ++ treninga.
Preporučena literatura