12.07.2015 Views

Programski jezik C - Pmf

Programski jezik C - Pmf

Programski jezik C - Pmf

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

58 POGLAVLJE 3. KONSTANTE I VARIJABLEfloat u,*pu;gdje je deklarirana varijabla u tipa float i pokazivač pu na float.Sadržaj memorijske lokacije može se dohvatiti pomoću pokazivača. Akoje pv varijabla tipa pokazivač na neki tip podatka, recimo char, onda je *pvznak spremljen na tu lokaciju. Tako možemo imatichar *pv;char v;.....v=’a’;*pv=’b’;printf("Na adresi %p smjesten je znak %c\n",&v,v);printf("Na adresi %p smjesten je znak %c\n",pv,*pv);.....Vidimo da * ima dvije različite uloge: u deklaraciji varijable ona označavada je varijabla pokazivačkog tipa, a u izvršnim naredbama ona predstavljaoperator dereferenciranja koji primijenjen na pokazivač daje vrijednost na kojupokazivač pokazuje. Sintaksa deklaracije pokazivača je u skladu s primjenom* kao operatora dereferenciranja tako što deklaracija tipachar *pv;sugerira da je pv nakon dereferenciranja (*pv) tipa char.Napomena. Prethodni primjer već ukazuje na opasnost koja se javljaupotrebom pokazivača. Pomoću pokazivača moguće je unutar programapristupiti svakoj memorijskoj lokaciji koju je operacijski sustav dodijelio programu.Tu se krije mogućnost (namjerne ili nenamjerne) korupcije memorije.U gornjem primjeru nije pokazana linija kôda u kojoj je pokazivač inicijaliziran.Pretpostavimo stoga da smo ga zaboravili inicijalizirati prije dereferenciranja*pv=’b’;Na koju memorijsku lokaciju će biti upisan znak ’b’? Precizan odgovor ovisio memorijskoj klasi pokazivača (vidi sekciju 9.2), no u slučaju da pv sadržineku slučajnu vrijednost naš će program pokušati pisati na slučajno odabranuadresu. Posljedice toga mogu biti najrazličitije, od prekida programa dopogrešnog funkcioniranja. Radi se, u svakom slučaju, o tipu greške koju jeteško otkriti. □

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!