Înainte de a discuta despre diferența dintre pointer și referință, să examinăm mai întâi sensul acestor doi termeni pe scurt. Într-un program, datele ocupă memorie. Locația exactă a memoriei în care s-au plasat datele într-un timp de execuție trebuie să fie cunoscută pentru a le accesa. Indicatorii variabilei și variabilele de referință sunt utilizate pentru a accesa aceste date și pentru a manipula adresele de memorie la care se află. Adică, atât indicatorii, cât și referințele pot fi folosite pentru a se referi indirect la obiecte. Ele dețin, în esență, adrese de memorie ca valori. diferența cheie între un indicator și o referință este asta un pointer este o variabilă care stochează adresa locației de memorie a altei variabile In timp ce referința este o variabilă care se referă la o altă variabilă. Cele două mecanisme, ac indicator și referință, au o sintaxă și o utilizare diferită.
Un indicator este un obiect de limbaj de programare care stochează adresa de memorie a unei valori în memoria de calcul.
int i = 5;
int * ptr = & i;
Prima linie definește o variabilă inițializată cu o valoare 5. A doua linie definește un indicator la adresa de memorie a variabilei. Aici, 'ptr' este declarat ca un obiect de tip 'pointer to int' a cărui valoare inițială este adresa obiectului i. În esență, ptr variază punctele la i prin stocarea adresei sale de memorie.
Obținerea valorii stocate într-o locație de memorie este apelată dereferencing. Operatorul * este folosit pentru a dereferența indicatorul. După încheierea declarațiilor, expresia indirectă * ptr dereferences ptr se referă la i.
Pentru a schimba valoarea lui i, se poate folosi următorul asignare;
* ptr = 20;
Pointerii pot fi reassigned pentru a face referire la diferite obiecte, de asemenea.
A null pointer este un tip special de pointer. Un pointer nul este adesea marcat cu 0 sau nul și nu indică nimic. Este o practică bună să utilizați un pointer nul în cazul în care nu aveți o adresă exactă care să fie atribuită pointerului. Această atribuire poate fi utilizată în operații și condiții logice.
Pointerii pot fi utilizate pentru stocarea și gestionarea adreselor de memorie alocată dinamic. Implementarea și controlul structurilor de date cum ar fi stivele, cozile și listele pot fi eficiente prin utilizarea indicatoarelor. De exemplu, o coadă poate avea două indicii; cap pointer și pointer coada. Pointerii pot fi, de asemenea, utilizați pentru a trece variabilele prin adresa lor, ceea ce ar permite schimbarea valorii. Manipularea directă a dispozitivelor cu memorie sau memorie cu memorie poate fi efectuată și prin utilizarea indicatorilor.
Indicatorii permit atât accesul protejat, cât și cel neprotejat la memoria adresată. Prin urmare, trebuie luate măsuri de precauție necesare pentru a verifica dacă conținutul unui indicator este valabil. În caz contrar, dereferentarea unui indicator cu o adresă de memorie invalidă ar putea provoca caderea programului.
Indicatorii sunt susținute în limbi precum C, C ++, Pascal și multe limbi de asamblare.
ac indicator A indicând adresa de memorie asociată variabilei b.
O referință este pur și simplu una identificator alternativ pentru o valoare stocată în memorie. Acesta permite unui program să acceseze indirect un anumit date.
int i = 5;
int & ref = i;
Prima linie definește o variabilă inițializată cu o valoare de 5. A doua linie declară "ref" ca un obiect de tip "referință la int" care se referă la i. O referință este diferită de datele în sine, dat fiind faptul că o referință este implementată ca adresa fizică a datei particulare care este stocată în memorie.
Odată definită, o referință nu poate fi realocată o nouă valoare. O referință se referă întotdeauna la obiectul cu care este inițializată. În următoarea atribuire, ref încă se referă la i, dar valoarea este acum 20.
ref = 20;
Conform exemplului de mai sus, referințele de dereferențiere nu necesită niciun operator.
Referințele pot fi utilizate atunci când o variabilă se referă întotdeauna la un obiect. Acest lucru se datorează faptului că, spre deosebire de pointeri, referințele nu pot fi nulă și trebuie să fie întotdeauna atribuite la inițializare. Deoarece referințele trebuie să se refere întotdeauna la un obiect, făcând o astfel de variabilă o referință, asigurând funcționarea eficientă și corectă a programului. Având în vedere că nu există referințe nula, validitatea unei variabile de referință nu trebuie testată.
Variabilele de referință pot fi utilizate pentru a transmite eficient datele mari ca argumente pentru proceduri. Referințele sunt, de asemenea, utilizate pentru partajarea de date mari între diferitele zone de cod, deoarece fiecare cod păstrează o referință la date.
Limbi de programare, cum ar fi C ++, Java, Python, Perl, PHP, Ruby etc..
Pointer: Un pointer este adresa de memorie a unui obiect stocat în memoria de calcul.
Referinţă: O referință este un identificator alternativ sau un pseudonim pentru un obiect.
Pointer: Un pointer este declarat cu operatorul *.
Referinţă: O referință este declarată cu operatorul &.
Pointer: O variabilă a indicatorului cere ca operatorul * să fie dereferențiat.
Referinţă: O variabilă de referință nu cere ca niciun operator să fie dereferențiat.
Pointer: Pointerii pot fi inițializați la nul. Astfel de variabile sunt numite pointeri null.
Referinţă: Referințele nu pot fi inițializate la null. Nu există nici o referință nulă. O referință trebuie să se refere mereu la un obiect.
Pointer: O variabilă pointer poate fi realocată pentru a se referi la diferite obiecte.
Referinţă: O variabilă de referință nu poate fi realocată. Se referă întotdeauna la obiectul cu care a fost inițializată.
Pointer: Variabilele indicatoare ar trebui folosite atunci când nu există posibilitatea de a face referire la nimic sau când este necesar să se facă trimitere la diferite lucruri la momente diferite.
Referinţă: Variabilele de referință ar trebui să fie utilizate atunci când va exista întotdeauna un obiect la care să se facă referire și când nu este necesar să se utilizeze acea variabilă de referință pentru a se referi la altceva decât la obiectul respectiv.
Pointer: Pointer variabilele pot fi folosite pentru implementarea algoritmilor și a structurilor de date.
Referinţă: Variabilele de referință pot fi utilizate în parametrii de funcții, iar tipurile de returnare definesc interfețele utile.
Pointer: Limbile de programare, cum ar fi C, C ++, Pascal și multe limbi de asamblare, susțin indicii.
Referinţă: Limbi de programare, cum ar fi C ++, Java, Python, Perl, PHP, Ruby etc..
Image courtesy: "Pointers" de Acest fisier a fost realizat de user: SvenTranslation.Own work.This imagine vector a fost creat cu Inkscape.(CC BY-SA 3.0) prin intermediul Commons -