Pokazivači
| Sjedište: | CARNET - Arhiva 2021 Loomen |
| E-kolegij: | Algoritmi i programiranje 2. razred |
| Knjiga: | Pokazivači |
| Otisnuo/la: | Gost (anonimni korisnik) |
| Datum: | subota, 21. ožujka 2026., 13:26 |
1. Definicija pokazivača
Svaka varijabla ima adresu na kojoj je pohranjena u radnoj memoriji računala. Do sada smo se bavili isključivo vrijednostima varijabli.
Pokazivač je varijabla koja sadrži memorijsku adresu varijable na koju pokazuje.
Pokazivači nam omogućuju stvaranje i manipulaciju dinamičkim strukturama podataka te pristup podacima direktno na adresi na kojoj su pohranjeni, a ne kopijama vrijednosti, tj. omogućuju nam dinamičku alokaciju memorije.
Deklaracija pokazivača:
tip *ime;
Kada se u deklaraciji ispred imena varijable nalazi zvjezdica, varijabla postaje pokazivač.Tip pokazivača ne odnosi se na tip podatka samog pokazivača nego je isti tipu varijable na koju pokazuje.
Npr.
int *a; //pokazivač na cijeli broj
Nakon deklaracije pokazivača, a prije no što se inicijalizira (tj. prije no što mu se dodjeli adresa na koju pokazuje) on sadržava proizvoljnu vrijednost. Zato je dobro za pokazivače koji se ne koriste dodijeliti vrijednost NULL.
int *a; //pokazivač koji ne pokazuje ni na što
a=NULL;
Uz pokazivače koristimo dva specijalna operatora: * i &.
& je unarni operator adresiranja ili referenciranja koji vraća memorijsku adresu varijable na koju pokazuje (ispred koje se nalazi).
Npr.
int broj;
int *pokBroj;
pokBroj=&broj; //vraća adresu varijable broj
* je unarni operator indirekcije ili dereferenciranja koji vraća vrijednost varijable na koju pokazuje.
2. Primjeri
1. primjer: Provjerimo adrese varijabli u memoriji
2. primjer: Deklaracija, inicijalizacija i uporaba pokazivača
3. primjer: Promjenom vrijednosti pokazivača možemo promijeniti vrijednost varijable na koju pokazuje
3. Funkcije i pokazivači
U lekciji funkcije pri pozivu funkcije funkciji smo prosljeđivali kopije vrijednosti stvarnih parametara koje je onda funkcija primala kao formalne parametre. Takav način prosljeđivanja parametara naziva se prijenos po vrijednosti ili call by value.
Pokazivači nam omogućuju prijenos po referenci (adresi) ili call by reference (adress) .
Kada se kao parametri funkciji predaju pokazivači u formalni parametar se prenosi kopija stvarnog parametra koji je pokazivač. U funkciji se taj parametar koristi da bi se moglo pristupiti vrijednosti stvarnog parametra što nam omogućuje:
- funkcije koje mogu vratiti više vrijednosti
- promjenu vrijednosti varijable na adresi varijable (pomoću pokazivača na tu adresu)
Primjer:
Primjer: Potrebno je izračunati površinu vrta i duljinu ograde oko vrta uporabom jedne funkcije. Korisnik unosi duljinu i širinu vrta u m.
4. Polja i pokazivači
Kada smo radili s poljima nismo spominjali da se članovi polja dohvaćaju preko pokazivača.
Kod primjera jednodimenzionalnog polja:
int b[ ]={10, 20, 30};
ime polja je pokazivač na prvi član polja.
cout<<b<<endl; //vraća adresu prvog člana polja, isto bismo postigli i sa &(b[0])
cout<<*b<<endl; //vraća vrijednost prvog člana polja
Želimo li dohvatiti vrijednost slijedećeg člana koristimo: *(b+1)
Za dvodimenzionalna polja imamo:
int brojevi [2][3]={{1,2,3},{4,5,6}};
*(*brojevi) // dohvaća brojevi[0][0] ↔1
*(*brojevi+1) // dohvaća brojevi[0][1] ↔2
*(*(brojevi+1) )// dohvaća brojevi[1][0] ↔4
*(*(brojevi+1) +1)// dohvaća brojevi[1][1] ↔5
5. Primjer: Polja i pokazivači
1. primjer: Korisnik unosi broj članova polja i članove polja u petlji, a ispis se vrši iz funkcije preko pokazivača.
Druga opcija bi bila npr. deklarirati n kao globalnu varijablu kako ju ne bismo morali prosljeđivati funkciji kao parametar.
6. Pokazivač na niz znakova
1. primjer:
2. primjer: