Pointer i referenca

Anonim

Oba pokazivača i reference su najmoćnije značajke u C i C + +, koje omogućuju programerima da manipuliraju memorijsku adresu izravno za učinkovito upravljanje memorijom.

Obje su varijable koje se neizravno upotrebljavaju za druge objekte i dijele zajedničke značajke na površini. Iako dijele puno zajedničkih mogućnosti, oni su također vrlo složeni za razumijevanje.

Pokazivač je varijabla koja drži memorijsku adresu druge varijable, dok je referenca poput pokazivača koji se može koristiti kako bi se posredno odnosio na drugu varijablu.

Većina programera čini da razvija neko razumijevanje o tome kada upotrebljavati pokazivače i kada treba koristiti referencu, ali često se susreću s problemima čije rješenje čini nejasno.

Da bismo bolje razumjeli filozofiju, shvatimo razliku između njih.

Što je pokazivač?

Svaka varijabla je memorijsko mjesto koje je definirano njezinom adresom i upareno je s identifikatorom koji sadrži neku vrijednost koja se može mijenjati tijekom programa. Jednostavnim pojmovima 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 varijabla pokazivača.

Ideja je koristiti identifikatore (ili imena) umjesto numeričkih adresa kako bi se olakšalo teret programiranja, čime se smanjuje složenost programa. Budući da se te adrese odnose na stvarne lokacije u memoriji računala, pokazivači se mogu koristiti za pristup i upravljanje sadržajem pohranjenim u memoriji.

Kao i svaka varijabla ili konstanta, pokazivači moraju biti deklarirani za svoje tipove. Budući da pokazivači sadrže memorijske adrese koje pripadaju zasebnoj vrsti podataka, one moraju biti deklarirane pomoću pokazivača prije nego što možete raditi s njima. Opći oblik pokazivača pokazivača je:

Data_type * var-name;

Ovdje je "Data_type" baza tipa pokazivača i "var-name" je varijabla pokazivača. Zvjezdica (*) ovdje se koristi za deklariranje pokazivača koji označava varijablu "var-name" kao varijablu pokazivača.

int * p; // pokazivač cijelog broja

float * x; / / float pokazivač

Ovdje varijabla "p" ukazuje na cijelu vrstu podataka koja se deklarira kao "int" koja se odnosi na vrstu podataka varijable. Slično tome, u drugom primjeru, "float" se odnosi na vrstu podataka varijable "x" koja je zapravo označena kao pokazivač na varijablu s pomičnim zarezom.

Što je referenca?

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

Programerima omogućuje stvaranje drugog naziva za varijablu koju mogu koristiti za manipuliranje sadržajem pohranjenim u toj varijabli. To je entitet koji je alias za drugu varijablu i ima istu adresu kao i izvorna varijabla. Podržava referentni postupak koji djeluje kao funkcionalni parametri funkcije i kada se definira da se odnosi na varijablu, ne može se ponovno izraditi, što znači da se ne može upućivati ​​na neku drugu varijablu.

Za razliku od pokazivača, oni ne trebaju dereferencing operatera za pristup vrijednosti; u stvari, oni se mogu koristiti kao normalne varijable.

int i;

int & ri = i;

Ovdje je "ri" referenca cijelog broja inicijalizirana na "i". Deklara "ri" kao objekt tipa "referenca na int". Referenca se lako može zbuniti s pokazivačem koji je nezavisna varijabla, čije se adresne vrijednosti ne mogu preraspodijeliti nakon stvaranja.

Razlika između pokazivača i referenci

  1. Osnove pokazivača i referenci

- Oba pružaju gotovo slične sposobnosti u smislu upotrebljivosti i razlika može biti lukav. Pokazivač je samo varijabla koja pohranjuje memorijsku adresu druge varijable, dok je referenca poput aliasa za već postojeću varijablu. Stvara drugi naziv za varijablu koja se može koristiti za izmjenu sadržaja pohranjenog u toj varijabli.

  1. Deklaracija pokazivača i reference

- Pokazivač je poput bilo koje druge varijable koja pohranjuje podatke. Za razliku od ostalih varijabli, varijable pokazivača pohranjuju memorijske adrese umjesto vrijednosti. Pokazivač se dereferenced pomoću operatora neodre | enja * za pristup memorijskoj lokaciji varijable na koju pokazuje. Referenca, s druge strane, ne treba operatera dereferencija da pristupi toj vrijednosti.

  1. Preraspodjela pokazivača i reference

- Za razliku od pokazivača koji se mogu inicijalizirati u bilo kojem trenutku, reference moraju biti dodijeljene prilikom inicijalizacije. Pristupima se može pristupiti izravno, a reference se ne mogu izravno pristupiti.

  1. Memorija adresa za pokazivač i referencu

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

  1. Vrijednost za pokazivač i referencu za NULL

- NULL predstavlja kraj popisa što znači da označava da je vrijednost nepoznata i navodi da varijabla nema važeći adresni prostor. Vrijednost NULL može se izravno dodijeliti varijabli pokazivača koji sugerira da ne pokazuje nigdje, dok se NULL ne može dodijeliti referentnoj varijabli.

Pointer vs Reference: Usporedba

Sažetak pokazivača prema referenci

Pokazivači su uvijek bili među omiljenim temama razgovora o C / C ++ programerima sve dok se reference nisu pojavile na slici. Reference su pomalo slične pokazateljima, ali imaju relativan udio pro i kontra za usporedbu. Iako se oba mogu koristiti za promjenu lokalnih varijabli jedne funkcije unutar druge funkcije, one imaju svoje razlike. Obje su moćne značajke u C i C + + koje omogućuju izravno manipulaciju memorijom, ali uz nekoliko iznimaka. Pokazivač drži memorijsku adresu varijable, dok je referenca samo pseudonim za drugu varijablu.