Razlika između pokazivača i niza

Razlika između pokazivača i niza
Razlika između pokazivača i niza

Video: Razlika između pokazivača i niza

Video: Razlika između pokazivača i niza
Video: Razlike između Adventista i Jehovihih svjedoka 2024, Novembar
Anonim

Pointer vs niz

Pointer 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 struktura podataka za pohranu kolekcije elemenata. Većina programskih jezika pruža metode za jednostavno deklarisanje nizova i pristup elementima u nizovima.

Šta je pokazivač?

Pointer 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 na memorijskoj lokaciji na koju upućuje pokazivač naziva se dereferenciranje. Kada se izvode operacije koje se ponavljaju, kao što je prelazak po stablima/stringovima, traženje u tabeli, itd., korišćenje 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 ukazuju pokazivači. Nulti pokazivač je pokazivač koji ne ukazuje ni na šta. U Javi, pristup null pokazivaču bi generirao izuzetak koji se zove NullPointerException.

Šta je niz?

Prikazan na slici 1, je dio koda koji se obično koristi za deklariranje i dodjelu vrijednosti nizu. Slika 2 prikazuje kako bi niz izgledao u memoriji.

int values[5];

values[0]=100;

values[1]=101;

values[2]=102;

values[3]=103;

values[4]=104;

Slika 1: Kod za deklarisanje i dodeljivanje vrednosti nizu

100 101 102 103 104
Indeks: 0 1 2 3 4

Slika 2: Niz pohranjen u memoriji

Iznad 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 dobija svoj vlastiti prostor u nizu. Jednom kada je niz definiran, njegova veličina je fiksna. Dakle, ako niste sigurni u veličinu niza u vrijeme kompajliranja, morali biste definirati dovoljno veliki niz da bude na sigurnoj strani. Ali, većinu vremena, zapravo ćemo koristiti manji broj elemenata nego što smo dodijelili. Dakle, značajna količina memorije je zapravo izgubljena. S druge strane, ako “dovoljno veliki niz” zapravo nije dovoljno velik, program bi se srušio.

Koja je razlika između pokazivača i nizova?

Pointer je tip podataka koji pohranjuje adresu memorijske lokacije u kojoj su pohranjeni neki podaci, dok su nizovi najčešće korištena struktura podataka za pohranu kolekcije elemenata. U programskom jeziku C, indeksiranje niza se vrši pomoću aritmetike pokazivača (tj. i-ti element niza x bi bio ekvivalentan (x+i)). Stoga se u C-u skup pokazivača koji ukazuju 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 primeni na niz, operator sizeof će vratiti celu veličinu niza, dok kada se primeni na pokazivač, vraća samo veličinu pokazivača.

Preporučuje se: