Razlika između pokazivača i reference

I pokazivači i reference najmoćnije su značajke na C i C ++ koje programerima omogućavaju izravno upravljanje memorijskom adresom radi učinkovitog upravljanja memorijom..

Obje su varijable koje se koriste za posredno pozivanje na druge predmete i imaju zajedničke značajke na površini. Iako imaju puno zajedničkih sposobnosti, oni su također vrlo složeni za razumijevanje.

Pokazivač je varijabla koja sadrži memorijsku adresu druge varijable, dok je referenca poput pokazivača koji se može koristiti za neizravno upućivanje na drugu varijablu.

Čini se da većina programera razvija razumijevanje kada koristiti pokazivače i kada koristiti reference, ali često nailaze na probleme čije rješavanje izgleda nejasno..

Dakle, da bismo bolje razumjeli filozofiju, shvatimo razliku između to dvoje.

Što je Pointer?

Svaka varijabla je memorijsko mjesto koje je definirano njegovom adresom i upareno je s identifikatorom koji sadrži neku vrijednost koja se može mijenjati tijekom programa. Jednostavno rečeno, varijabla je simbol koji predstavlja količinu.

Pokazivač je varijabla koja sadrži memorijsku adresu druge varijable. Pokazivač nije ništa drugo nego adresa, a varijabla koja pohranjuje pokazivač naziva se varijablom pointera.

Ideja je koristiti identifikatore (ili imena) umjesto brojčanih adresa kako bi se olakšao teret programiranja i tako smanjila složenost programa. Budući da se te adrese odnose na stvarna mjesta u memoriji računala, pokazivači se mogu koristiti za pristup i manipuliranje sadržajem pohranjenim u memoriji.

Kao i bilo koja varijabla ili konstanta, pokazatelji se moraju deklarirati za njihove vrste. Budući da pokazivači sadrže memorijske adrese koje pripadaju zasebnoj vrsti podataka, moraju biti deklarirane pomoću pokazivača prije nego što možete s njima raditi. Opći oblik pokazivačke deklaracije je:

Data_type * var-name;

Ovdje je "Data_type" osnovna vrsta pokazivača, a "var-name" varijabla pokazivača. Zvezdica (*) se ovdje koristi za deklariranje pokazivača koji označava varijablu "var-name" kao varijablu pointera..

int * p; // cjelobrojni pokazivač

plutati * x; // plutajući pokazivač

Ovdje varijabla "p" upućuje na cijeli broj podataka koji je deklariran kao "int" koji se odnosi na tip podataka varijable. Slično tome, u drugom primjeru, "plutajući" se odnosi na tip podataka varijable "x" koja je u stvari označena kao pokazivač na varijablu s pomičnom točkom.

Što je referenca?

Referenca je poput pokazivača s neizravnim pristupom varijabli. To je poput aliasa za drugu varijablu, što znači da je samo još jedno ime za već postojeću varijablu.

Omogućuje programerima da stvore drugo ime za varijablu pomoću koje mogu manipulirati sadržajem pohranjenim u toj varijabli. To je entitet alias za drugu varijablu i ima istu adresu kao izvorna varijabla. Podržava prolazne reference koje djeluju kao formalni parametri funkcije, a jednom kada je definirano da se odnosi na varijablu, ne može se ponovno postaviti što znači da se ne može uputiti na drugu varijablu.

Za razliku od pokazatelja, ne treba im operater dereferenciranja da bi pristupio vrijednosti; u stvari, oni se mogu koristiti kao normalne varijable.

int i;

int & ri = i;

Ovdje je "ri" cjelobrojna referenca inicijalizirana na "i". Proglašava "ri" kao objekt tipa "referenca na int". Referenca se lako može zbuniti s pokazivačem koji je neovisna varijabla, čije se adrese adrese ne mogu preimenovati nakon kreiranja.

Razlika između pokazivača i reference

  1. Osnove pokazivača i referenca

- Oboje pružaju gotovo slične mogućnosti u pogledu upotrebljivosti i razlika može biti škakljiva. Pokazivač je samo varijabla koja pohranjuje memorijsku adresu druge varijable, dok je referenca kao alias za već postojeću varijablu. Stvara drugo ime varijable koja se može koristiti za izmjenu sadržaja pohranjenih u toj varijabli.

  1. Izjava pokazivača i referenca

- Pokazivač je poput bilo koje druge varijable koja pohranjuje dio podataka. Za razliku od drugih varijabli, varijable pokazivača pohranjuju memorijske adrese umjesto vrijednosti. Poniži se pokazivač pomoću operatora indirekcije * za pristup memorijskoj lokaciji varijable na koju upućuje. S druge strane, referenca ne treba nijednom operateru preusmjeravanja za pristup vrijednosti.

  1. Dodjela pokazivača i referenca

- Za razliku od pokazatelja koji se mogu inicijalizirati u bilo kojem trenutku, reference se moraju dodijeliti prilikom inicijalizacije. Pointovima se može pristupiti izravno, dok referencama nije moguće izravno pristupiti.

  1. Memorijska adresa za pokazivač i referencu

- Promjenica pokazivača ima svoje mjesto u memoriji, što znači da kada deklarirate pokazivač, odredite mjesto koje je memorijska adresa dodijeljena svakoj jedinici memorije. Promjena pokazivača ima istu adresu gdje je spremljena u memoriji. Referentna varijabla, s druge strane, alias je za drugu varijablu, čime se uzima adresa referentne varijable.

  1. NULL vrijednost za pointer i referencu

- NULL predstavlja kraj popisa što znači da vrijednost nije poznata i određuje da varijabla nema važeći adresni prostor. NULL vrijednost može se dodijeliti izravno pokazivačkoj varijabli što sugerira da nigdje ne upućuje, dok NULL ne može biti dodijeljena referentnoj varijabli.

Pointer protiv reference: uporedni grafikon

Sažetak pokazivača naspram reference

Pokazivači su uvijek bili omiljena tema rasprave C / C ++ programera dok reference nisu došle do slike. Upućivanja su pomalo slična pokazateljima, ali imaju svoj udio prednosti i nedostataka u usporedbi. Iako se obje mogu koristiti za promjenu lokalnih varijabli jedne funkcije u drugoj funkciji, one imaju svoje razlike. Obje su snažne značajke u C i C ++ koje vam omogućuju izravno manipuliranje memorijom, ali s nekoliko iznimaka. Pokazivač sadrži memorijsku adresu varijable, dok je referenca samo nadimak za drugu varijablu.