80 likes | 243 Views
Pokazivači (pointers). Pokazivači omogućavaju: učinkovito predstavljanje složenih struktura podataka dijeljenje istog memorijskog prostora od strane različitih dijelova koda promjenu vrijednosti parametara funkcije (referentni parametri) dinamičku alokaciju memorije
E N D
Pokazivači (pointers) • Pokazivači omogućavaju: • učinkovito predstavljanje složenih struktura podataka • dijeljenje istog memorijskog prostora od strane različitih dijelova koda • promjenu vrijednosti parametara funkcije (referentni parametri) • dinamičku alokaciju memorije • učinkovito rukovanje sa poljima
Što je pokazivač? • Pokazivač je varijabla čiji je sadržaj adresa druge varijable. • U pokazivaču nije pohranjena vrijednost integer, double ili nekog drugog tipa. • U pokazivaču je spremljena adresa na kojoj je pohranjena korisna vrijednost. • Pokazivač sadrži memorijsku adresu objekta na koji pokazuje.
Usmjeravanje (inicijalizacija) pokazivača usmjeravanje pokazivača na N pokazivač varijabla N adresa varijable N kazalo kazalo=&N N &N ? 5 int*kazalo; int N=5; deklaracija i definicija varijable deklaracija pokazivača na int
Pridruživanje pokazivača • Kada pokazivaču pridružimo drugi pokazivač oni nakon toga sadrže istu adresu (pokazuju na istu adresu). • Pridruživanje pokazivača ne mijenja sadržaj na danoj adresi. int a=2; int *p1=&a,*p2; a 2 p1 p2 p2=p1 ?
Primjeri sa kviza: 1) Za dane naredbe: double x = 4.3; double* ptr = &x; 1. Vrijednost ptr je: 2. Vrijednost *ptr je: 3. Što se događa u memorijskom prostoru kada se izvršava slijedeća naredba: *ptr = 24.9; adresa varijable x 4.3 varijabla x dobiva vrijednost 24.9
Ispis: QQ ZZ YY 2) Kakav ispis daje program? • #include <iostream.h> • int main() • { • char c = 'Q'; • char *char_pointer = &c; • cout<<c<<*char_pointer<<" "; • c = 'Z'; • cout<<c<<*char_pointer<<" "; • *char_pointer = 'Y'; • cout<<c<<*char_pointer<<" "; • return 0; • }
Odaberi odgovor: A. ptr1 pokazuje na istu varijablu kao i ptr2 B. ptr1 i ptr2 pokazuju na različite varijable sa istom vrijednosti C. naredba je sintaktičkineispravna 4) Dane su deklaracije: double x = 3.14, y = 2.72; double *ptr1, *ptr2; ptr1 = &x; ptr2 = &y; Kakav je učinak slijedećih dodjela (nisu uzastopne)? 1. ptr1 = ptr2; 2. *ptr1 = ptr2; 3. *ptr1 = *ptr2; A C B
5) Dane su deklaracije: struct TipProizvoda { int kolicina; float cijena; }; TipProizvoda Proizvod1 = {17, 4.99}; TipProizvoda* pokazivac = &Proizvod1; Koji od slijedećih izraza predstavlja ispravni pristup sadržaju podatkovnog člana strukture Proizvod1? OK 1. (*pokazivac).cije88na 2. *pokazivac.cijena 3. pokazivac -> cijena OK