Prije nego što razgovaramo o razlici između pointera i reference, prvo ćemo ukratko pogledati značenje ova dva pojma. U programu podaci zauzimaju memoriju. Točno mjesto memorije u koju su podaci stavljeni u vrijeme izvršenja treba biti poznato kako bi im se pristupio. Pokazivačke varijable i referentne varijable koriste se za pristup tim podacima i manipuliranje memorijskim adresama na kojima se nalaze. Odnosno, i pokazivači i reference mogu se koristiti za posredno pozivanje na objekte. Oni u osnovi zadržavaju memorijske adrese kao svoje vrijednosti. ključna razlika između pokazivača i reference je to pointer je varijabla koja pohranjuje adresu memorijske lokacije druge varijable dok a referenca je varijabla koja se odnosi na drugu varijablu. Dva mehanizma, pokazivač i reference imaju različitu sintaksu i upotrebu.
Pokazivač je objekt programskog jezika koji pohranjuje memorijsku adresu vrijednosti u računalnu memoriju.
int i = 5;
int * ptr = & i;
Prvi redak definira varijablu inicijaliziranu vrijednošću 5. Drugi redak definira pokazivač na memorijsku adresu varijable. Ovdje je 'ptr' deklariran kao objekt tipa 'pointer na int' čija je početna vrijednost adresa objekta i. U osnovi ptr varijabla upućuje na i pohranjujući njezinu memorijsku adresu.
Pozva se dobivanje vrijednosti pohranjene na memorijskoj lokaciji dereferencing. * Operater se koristi za dereferenciranje pointera. Nakon završetka deklaracije, neizravni izraz * ptr dereferences ptr odnosi se na i.
Za promjenu vrijednosti i može se koristiti sljedeći zadatak;
* ptr = 20;
Pokazivači se mogu dodijeliti i za različite objekte.
nulti pointer je posebna vrsta pokazivača. Nulti pokazivač se često označava sa 0 ili nulom i ne znači ništa. Dobra praksa je koristiti nultu pokazivač u slučaju da nema točnu adresu koja će biti dodijeljena pokazivaču. Ovaj zadatak se može koristiti u logičkim operacijama i uvjetima.
Pokazivači mogu biti koristi se za spremanje i upravljanje adresama dinamički raspoređene memorije. Implementacija i kontrola strukture podataka kao što su skupovi, redovi i popisi mogu biti učinkoviti uz korištenje pokazivača. Na primjer, red može imati dva pokazivača; pokazivač glave i pokazivač repa. Pokazivači se također mogu koristiti za prosljeđivanje varijabli prema njihovoj adresi, što bi omogućilo promjenu vrijednosti. Izravnom manipulacijom s memorijom ili uređajima s mapom memorije također se može upravljati pomoću pokazivača.
Pokazivači omogućuju i zaštićeni i nezaštićeni pristup adresiranoj memoriji. Stoga se moraju poduzeti potrebne mjere kako bi se potvrdilo da je sadržaj pokazivača valjan. U suprotnom, preusmjeravanje pokazivača s nevaljanom memorijskom adresom može prouzrokovati pad sustava.
Pokazivači su podržani na jezicima poput C, C ++, Pascal i mnogim skupnim jezicima.
Pokazivač pokazujući na memorijsku adresu povezanu sa varijablom b.
Upućivanje je jednostavno an alternativni identifikator vrijednosti pohranjene u memoriji. Omogućuje programu neizravni pristup određenoj datumi.
int i = 5;
int & ref = i;
Prvi redak definira varijablu inicijaliziranu s vrijednošću 5. Drugi redak deklarira 'ref' kao objekt tipa 'referenca na int' koji se odnosi na i. Referenca se razlikuje od samih podataka s obzirom da se referenca provodi kao fizička adresa određenog podatka koji se sprema u memoriju.
Jednom definirana, referentnoj vrijednosti ne može se dodijeliti nova vrijednost. Upućivanje se uvijek odnosi na objekt s kojim je inicijaliziran. U sljedećem rasporedu ref se još uvijek odnosi na i, ali vrijednost je sada 20.
ref = 20;
Prema gornjem primjeru, reference za preusmjeravanje ne zahtijevaju nijedan operater.
Upućivanja se mogu koristiti kada se varijabla uvijek odnosi na objekt. To je zato što, za razliku od pokazivača, reference ne mogu biti nule i moraju se uvijek dodijeliti pri inicijalizaciji. Budući da se reference moraju uvijek odnositi na neki objekt, upućivanje takve varijable osigurava da će program raditi učinkovito i ispravno. S obzirom da nema nijedne reference, valjanost referentne varijable ne treba testirati.
Referentne varijable mogu biti koristi se za efikasno prosljeđivanje velikih podataka kao argumenata u postupke. Upućivanja se koriste i za dijeljenje velikih podataka između različitih područja kodova jer se svaki kod odnosi na te podatke.
Podržani jezici za programe kao što su C ++, Java, Python, Perl, PHP, Ruby itd.
Pokazivač: Pokazivač je memorijska adresa objekta pohranjenog u računalnoj memoriji.
Referenca: Referenca je alternativni identifikator ili pseudonim za objekt.
Pokazivač: Pokazivač je deklariran s operatorom *.
Referenca: Upućena je oznaka s & operatorom.
Pokazivač: Varijabla pointera zahtijeva odstupanje operatora *.
Referenca: Referentna varijabla ne zahtijeva odstupanje operatora.
Pokazivač: Pokazivači se mogu inicijalizirati na nulu. Takve se varijable nazivaju nultim pokazivačima.
Referenca: Reference se ne mogu inicijalizirati na nulu. Nema toga kao nulta referenca. Upućivanje se uvijek mora odnositi na objekt.
Pokazivač: Varijabla pokazivača može se dodijeliti za različite objekte.
Referenca: Referentnu varijablu nije moguće ponovno dodijeliti. Uvijek se odnosi na objekt s kojim je inicijaliziran.
Pokazivač: Varijable pokazivača trebaju se koristiti kada ne postoji mogućnost pozivanja na ništa ili kada se zahtijeva upućivanje na različite stvari u različitom vremenu.
Referenca: Referentne varijable trebaju se upotrijebiti kad će uvijek postojati objekt na koji se odnosi i kad se od njega ne zahtijeva da se referentna varijabla odnosi na bilo što drugo osim na taj objekt.
Pokazivač: Varijable pokazivača mogu se koristiti za implementaciju algoritama i struktura podataka.
Referenca: Referentne varijable mogu se koristiti u funkcijskim parametrima, a vrste povratka definiraju korisna sučelja.
Pokazivač: Programski jezici kao što su C, C ++, Pascal i mnogi jezici za montažu podržavaju pokazivače.
Referenca: Podržani jezici za programe kao što su C ++, Java, Python, Perl, PHP, Ruby itd.
Ljubaznošću slike: "Pokazivači" ove datoteke napravio je korisnik: SvenTranslation.Osopljeni rad.Ova vektorska slika stvorena je s Inkscapeom (CC BY-SA 3.0) putem Commonsa -