Professional Documents
Culture Documents
10 Pokazivaci PDF
10 Pokazivaci PDF
Rad s pokazivačima
Sadržaj
Pokazivači na osnovne tipove podataka
Pokazivači na nizove
Pokazivači na strukture
Programiranje 2 2
Pokazivači 1
Pokazivači
Pokazivači (eng. "pointer") su varijable koje umjesto vrijednosti
određenog tipa podataka sadrže adresu varijable tog tipa podataka.
Sintaksa:
tip_podataka * ime_pok_var;
Programiranje 2 3
Pokazivači
Pri radu s pokazivačima koriste se dva operatora:
& - adresni operator – unarni operator koji se koristi se za pristup
adresi varijable.
Programiranje 2 4
Pokazivači 2
Primjer
main()
{
//deklaracija
Ime Mem. Mem.
int x; varijable adresa sadržaj
int *p; x 1000 ? 256 45
//inicijalizacija
p 1500 ? 1000
x = 256;
p = &x;
*p = 45;
printf(“ x = %d\n\n”, x);
}
Programiranje 2 5
Inicijalizacija pokazivača
Kod deklaracije pokazivača, pokazivačkoj varijabli se dodjeljuje
neodređena vrijednost.
Programiranje 2 6
Pokazivači 3
Inicijalizacija pokazivača
Ukoliko želimo da pokazivač ne pokazuje na ništa treba mu dodijeliti
vrijednost NULL.
Programiranje 2 7
main()
{
char c = 'A';
char *pok_c = &c;
c = 'B';
Koje su sve kombinacije
printf("\n %x => %c ", pok_c, *pok_c);
varijabli c i pok_c s
operatorima * i &
*pok_c = 'C'; moguće? Kad se koja
printf("\n %x => %c\n\n", &c, c); koristi?
}
Programiranje 2 8
Pokazivači 4
Primjer:
Što radi program?
Programiranje 2 9
Primjer
Napisati program koji zbraja, oduzima i množi 2 broja, ali se svim
varijablama smije pristupati samo preko pokazivača.
Programiranje 2 10
Pokazivači 5
Pokazivači kao argumenti f-je
Pokazivači se često koriste kao argumenti f-je, jer je na taj način moguće
mijenjati vrijednosti varijabli koje nisu globalne, ni deklarirane u funkciji.
Što je rezultat programa?
Programiranje 2 11
Nadopuni funkciju …
Programiranje 2 12
Pokazivači 6
Primjer
Napisati funkciju koja za niz od N elemenata traži minimalnu i
maksimalnu vrijednost. Obije vrijednosti je potrebno ispisati u
glavnom programu.
Programiranje 2 13
Pokazivači i nizovi
Ime niza je adresa (pokazivač) prvog elementa niza.
Primjer:
int x[10];
int *pok_x;
pok_x = x;
Programiranje 2 14
Pokazivači 7
Pokazivači i stringovi
Ime niza(stringa) je adresa (pokazivač) prvog elementa niza.
Primjer:
Pokazivači i stringovi
Što će raditi program?
Programiranje 2 16
Pokazivači 8
Inkrement i dekrement pokazivača
C omogućava inkrement i dekrement pokazivača pri čemu se vrijednost
pokazivača uvećava ili umanjuje ovisno o tipu podataka.
Sintaksa:
tip_podataka * p; // p se treba inicijalizirati na neku adresu
// odgovarajućeg tipa pod.
Programiranje 2 17
*(str2++) = *(str1++);
Programiranje 2 18
Pokazivači 9
Primjer:
Napisati program koji unosi string s tastature i zatim na kraj stringa
dodaje ***.
Programiranje 2 19
Primjer:
Što radi program?
Primjer:
Programiranje 2 20
Pokazivači 10
Prioritet operatora
Što je rezultat programa?
Programiranje 2 21
Programiranje 2 22
Pokazivači 11
Primjer
Što radi program?
A program …
Programiranje 2 23
Primjer
Napisati funkciju koja pronalazi provo pojavljivanje nekog znaka u
stringu. U funkciju se pronosi pokazivač na string, vrijednost znaka i
funkcija vrača poziciju tog znaka u stringu. Funkcija ne smije koristiti
niti jednu cjelobrojnu varijablu (niti pokazivač na cijeli broj).
Programiranje 2 24
Pokazivači 12
Pokazivači na strukture
Kod pristupa strukturi preko pokazivača koristi se ili operator indirekcije (*) u
kombinaciji s . ili ->
Primjer:
struct datum {
int dan, mj, god;
} x, *p;
main() {
p = &x;
(*p).dan = 30;
p->mj = 6;
(*p).god = 2000;
printf(" Datum je: %d.%d.%d\n", x.dan, x.mj, x.god);
}
Programiranje 2 25
Programiranje 2 26
Pokazivači 13
Kako se još mogu koristiti pokazivači
Pokazivači kao povratna vrijednost funkcije
Pokazivači na pokazivače
Pokazivači na pokazivače na pokazivače
…
Nizovi pokazivača
Pokazivači na funkcije
…
Programiranje 2 27
Zadaci za vježbe
39. Napisati program koji prvo unosi, a zatim ispisuje elemente nekog polja
brojeva i polja znakova zajedno s adresom svakog elementa. Sve unose
i ispise je potrebno napraviti preko pokazivača i ne smiju se koristiti
[].
40. Napisati program koji u jednoj funkciji računa sumu, produkt i razliku
dva broja, a svi se rezultati ispisuju u glavnom programu.
42. Napisati program koji za zadani string traži koliko se puta podstring
pojavljuje u stringu. Podstring je potrebno unijeti u f-ji. F-ja za
pretraživanje treba vratiti broj ponavljanja. U funkciji za
pretraživanje se može koristiti f-ja strncmp iz string.h.
Programiranje 2 28
Pokazivači 14
Dodatni zadatak
Napisati program koji za niz struktura (definirati proizvoljnu
strukturu) računa adresu i-tog elementa (i – je proizvoljan broj između
0 i broj_elemenata_niza -1).
Kao početna adresa od koje se računa se može uzeti adresa prvog
elementa niza.
Programiranje 2 29
Dodatni zadatak za 5+ ☺
Napisati program koji korištenjem naredbe gets uzima s tastature 1
rečenicu (maks. 10 riječi). Rečenicu je potrebno razbiti na riječi i na
kraju te riječi ispisati u obrnutom redoslijedu.
Npr. rečenicu: "Programiranje u C-u je jako zabavno." treba ispisati:
"zabavno. jako je C-u u Programiranje"
U rješavanju zadatka mogu pomoći funkcije: strchr(), strncpy(),
strlen(), …
Programiranje 2 30
Pokazivači 15
Dodatni zadatak za 5+ ☺
Programiranje 2 31
Programiranje 2 32
Pokazivači 16
Dodatni zadatak za 5+ ☺ - Pokazivači na pokazivače
Programiranje 2 33
Rad s pokazivačima
KRAJ!!!
Pokazivači 17