Pokazivač protiv polja
Pokazivač je tip podataka koji sadrži referencu na memorijsku lokaciju (tj. varijabla pokazivača pohranjuje adresu memorijske lokacije u kojoj su pohranjeni neki podaci). Nizovi su najčešće korištena podatkovna struktura za pohranjivanje zbirke elemenata. Većina programskih jezika nudi metode za jednostavno deklariranje nizova i pristup elementima u nizovima.
Što je pokazivač?
Pokazivač je tip podataka koji pohranjuje adresu memorijske lokacije u kojoj su pohranjeni neki podaci. Drugim riječima, pokazivač sadrži referencu na memorijsku lokaciju. Pristup podacima pohranjenim u memorijskoj lokaciji na koju upućuje pokazivač naziva se dereferenciranje. Prilikom izvođenja ponavljajućih operacija kao što je obilaženje stabala/nizova, traženje tablica, itd., korištenje pokazivača bi poboljšalo performanse. To je zato što je dereferenciranje i kopiranje pokazivača jeftinije od stvarnog kopiranja i pristupa podacima na koje pokazuju pokazivači. Nulti pokazivač je pokazivač koji ne pokazuje ni na što. U Javi bi pristup nultom pokazivaču generirao iznimku koja se zove NullPointerException.
Što je niz?
Prikazano na slici 1 je dio koda koji se obično koristi za deklariranje i dodjeljivanje vrijednosti nizu. Slika 2 prikazuje kako bi niz izgledao u memoriji.
int vrijednosti[5]; vrijednosti[0]=100; vrijednosti[1]=101; vrijednosti[2]=102; vrijednosti[3]=103; vrijednosti[4]=104; |
Slika 1: Kod za deklariranje i dodjeljivanje vrijednosti nizu
100 | 101 | 102 | 103 | 104 |
Indeks: 0 | 1 | 2 | 3 | 4 |
Slika 2: Niz pohranjen u memoriji
Gornji kod definira niz koji može pohraniti 5 cijelih brojeva i pristupa im se pomoću indeksa od 0 do 4. Jedno važno svojstvo niza je da se cijeli niz dodjeljuje kao jedan blok memorije i svaki element dobiva svoj vlastiti prostor u nizu. Nakon što je niz definiran, njegova veličina je fiksna. Dakle, ako niste sigurni u veličinu polja u vrijeme kompajliranja, morali biste definirati dovoljno veliko polje da biste bili sigurni. Ali, većinu vremena, zapravo ćemo koristiti manji broj elemenata nego što smo dodijelili. Dakle, znatna količina memorije je zapravo izgubljena. S druge strane, ako "dovoljno velik niz" zapravo nije dovoljno velik, program bi se srušio.
Koja je razlika između pokazivača i polja?
Pokazivač je tip podataka koji pohranjuje adresu memorijske lokacije u kojoj su pohranjeni neki podaci, dok su nizovi najčešće korištena podatkovna struktura za pohranjivanje zbirke elemenata. U programskom jeziku C, indeksiranje polja se vrši pomoću aritmetike pokazivača (tj. i-ti element niza x bio bi ekvivalentan (x+i)). Stoga se u C-u skup pokazivača koji pokazuju na skup memorijskih lokacija koje su uzastopne može smatrati nizom. Nadalje, postoji razlika u tome kako operator sizeof djeluje na pokazivače i nizove. Kada se primijeni na niz, operator sizeof vratit će cijelu veličinu niza, dok kada se primijeni na pokazivač, vratit će samo veličinu pokazivača.