Diferența dintre Pointer și Referință

Ambele indicatoare și referințe sunt cele mai puternice caracteristici din C și C ++ care permit programatorilor să manipuleze direct adresa de memorie pentru gestionarea eficientă a memoriei.

Ambele sunt variabile care sunt folosite pentru a se referi indirect la alte obiecte și au unele caracteristici comune pe suprafață. Deși împărtășesc o mulțime de capabilități comune, ele sunt, de asemenea, foarte complexe de înțeles.

Un pointer este o variabilă care deține adresa de memorie a altei variabile, în timp ce o referință este ca un pointer care poate fi folosit pentru a se referi indirect la o altă variabilă.

Majoritatea programatorilor par să dezvolte o anumită înțelegere cu privire la momentul utilizării indicatorilor și când să folosească referințe, dar întâlnesc de multe ori probleme la care soluția pare neclară.

Deci, pentru a înțelege mai bine filozofia, să înțelegem diferența dintre cele două.

Ce este un Pointer?

Fiecare variabilă este o locație de memorie care este definită de adresa acesteia și este asociată cu un identificator care conține o anumită valoare care poate fi modificată în cursul unui program. În termeni simpli, variabila este un simbol care reprezintă o cantitate.

Un pointer este o variabilă care conține adresa de memorie a altei variabile. Un pointer nu este altceva decât o adresă și o variabilă care stochează un pointer este numită variabilă de pointer.

Ideea este să utilizați identificatori (sau nume) în loc de adrese numerice pentru a ușura povara programării, reducând astfel complexitatea programelor. Deoarece aceste adrese se referă la locațiile reale din memoria calculatorului, pointerii pot fi utilizați pentru a accesa și manipula conținutul stocat în memorie.

Ca orice variabilă sau constantă, indicatorii trebuie să fie declarați pentru tipurile lor. Deoarece indicatorii conțin adrese de memorie care aparțin unui tip de date separat, ele trebuie declarate folosind indicii înainte de a putea lucra cu aceștia. Forma generală a unei declarații a indicatorului este:

Tipul de date * var-name;

Aici, "Data_type" este tipul de bază al pointerului și "var-name" este variabila pointer. Asteriscul (*) de aici este folosit pentru a declara pointerul care desemnează variabila "var-name" ca variabilă a indicatorului.

int * p; // indicatorul integer

float * x; // indicatorul float

Aici, variabila "p" indică un tip de date întreg care este declarat "int" care se referă la tipul de date al variabilei. În mod similar, în cel de-al doilea exemplu, "float" se referă la tipul de date al variabilei "x" care este, de fapt, desemnat ca un pointer la o variabilă în virgulă mobilă.

Ce este o referință?

O referință este ca un pointer cu acces indirect la o variabilă. Este ca un alias pentru o altă variabilă, adică este doar un alt nume pentru o variabilă deja existentă.

Acesta permite programatorilor să creeze un al doilea nume pentru variabila pe care o pot utiliza pentru a manipula conținutul stocat în acea variabilă. Este o entitate care este un alias pentru o altă variabilă și are aceeași adresă ca variabila inițială. Acesta susține parcurgerea cu referință acționând ca parametri formali ai funcției și odată ce aceasta este definită ca referindu-se la o variabilă, ea nu poate fi resetată ceea ce înseamnă că nu poate fi referită la o altă variabilă.

Spre deosebire de indicatori, ei nu au nevoie de dereferencing operator pentru a accesa valoarea; de fapt, ele pot fi folosite ca variabile normale.

int i;

int & ri = i;

Aici, "ri" este o referință intreg inițializată la "i". Declară "ri" ca obiect de tip "referință la int". O referință poate fi ușor confundată cu un pointer care este o variabilă independentă, ale cărei valori de adresă nu pot fi realocate odată creată.

Diferența dintre Pointer și Referință

  1. Elementele de bază ale indicatorului și referinței

- Ambele oferă capabilități aproape similare în termeni de utilizare și distincția poate fi dificilă. Un pointer este doar o variabilă care stochează adresa de memorie a unei alte variabile, în timp ce o referință este ca un alias pentru o variabilă deja existentă. Creează un al doilea nume pentru o variabilă care poate fi utilizată pentru a modifica conținutul stocat în acea variabilă.

  1. Declarația de indicatori și de referință

- Un pointer este ca orice altă variabilă care stochează o bucată de date. Spre deosebire de alte variabile, variabilele pointerului stochează adresele de memorie în loc de valori. Un pointer este dereferențiat folosind operatorul de indirecție * pentru a accesa locația de memorie a variabilei pe care o indică. O referință, pe de altă parte, nu are nevoie de niciun operator de dereferențiere pentru a accesa valoarea.

  1. Redistribuirea indicatorului și a referinței

- Spre deosebire de indicii care pot fi inițializați în orice moment, referințele trebuie atribuite la inițializare. Pointerii pot fi accesați direct, în timp ce referințele nu pot fi accesate direct.

  1. Adresă de memorie pentru indicatorul și referința

- O variabilă a indicatorului are propria sa locație în memorie, ceea ce înseamnă că atunci când declarați un pointer, specificați o locație care este o adresă de memorie atribuită fiecărei unități de memorie. Variabila indicator are aceeași adresă unde este salvată în memorie. O variabilă de referință, pe de altă parte, este un alias pentru o altă variabilă, luând astfel adresa variabilei de referință.

  1. Valoare NULL pentru indicatorul și referința

- NULL reprezintă sfârșitul listei, ceea ce înseamnă că indică faptul că valoarea este necunoscută și specifică faptul că variabila nu are un spațiu de adresă valid. Valoarea NULL poate fi atribuită direct unei variabile a indicelui care sugerează că nu indică nicăieri, în timp ce NULL nu poate fi atribuită unei variabile de referință.

Pointer vs. Referință: Graficul comparației

Rezumat al indicatorului față de referință

Indicatorii au fost întotdeauna printre subiectele preferate de discuție a programatorilor C / C ++ până când au apărut referințe la imagine. Referințele sunt oarecum asemănătoare cu indicatorii, dar au o cotă echitabilă de argumente pro și contra în comparație. În timp ce ambele pot fi folosite pentru a schimba variabilele locale ale unei funcții în cadrul unei alte funcții, ele au diferențele. Ambele sunt caracteristici puternice în C și C ++ care vă permit să manipulați direct memoria, dar cu câteva excepții. Un pointer deține adresa de memorie a unei variabile, în timp ce o referință este doar un alias pentru o altă variabilă.