Differenza tra riferimento C ++ e puntatore

Sebbene il riferimento C ++ al puntatore sembri essere simile, esiste una differenza significativa tra il riferimento C ++ e il puntatore. Una variabile di riferimento può essere definita come un altro nome per una variabile esistente. Una volta inizializzata questa variabile, è possibile utilizzare il nome della variabile per fare riferimento a un'altra variabile. I puntatori, d'altra parte, sono variabili che memorizzano l'indirizzo di una variabile. Come ogni variabile, queste vengono dichiarate per prime e quindi l'indirizzo di qualsiasi variabile può essere memorizzato in esse. Diamo un'occhiata alle differenze tra riferimento C ++ e puntatore in dettaglio come di seguito.

Confronto testa a testa tra riferimento C ++ e puntatore (infografica)

Di seguito è la differenza 7 principale tra riferimento C ++ vs puntatore

Differenze chiave tra riferimento C ++ e puntatore

Sia il riferimento C ++ che il puntatore sono scelte popolari nel mercato; parliamo di alcune delle principali differenze tra riferimento C ++ e puntatore:

La differenza principale tra riferimento C ++ e puntatore è che uno si riferisce a un'altra variabile mentre quest'ultima memorizza l'indirizzo di una variabile. I riferimenti non apportano modifiche a una variabile originale mentre se il puntatore viene modificato influisce sulla variabile originale. Un riferimento deve essere inizializzato sulla dichiarazione mentre non è necessario inizializzare un puntatore una volta che è stato dichiarato. È possibile creare una matrice di puntatori mentre non è possibile creare una matrice di riferimenti. Un valore nullo non può essere assegnato a un riferimento ma può essere assegnato a un puntatore.

Tabella di confronto tra riferimento C ++ e puntatore

Il confronto principale tra riferimento C ++ e puntatore è discusso di seguito:

La base del confronto tra riferimento C ++ e puntatoreRiferimento C ++pointer
variabiliUn riferimento può essere detto come alias di una variabile esistente. L'uso principale di questa variabile funziona come parametro che funziona come riferimento pass-by. Questo viene passato a una funzione. La funzione a cui viene passato funziona sulla variabile originale anziché sulla copia in un valore di passaggio. Le modifiche apportate all'interno della funzione verranno riflesse anche all'esterno.Le variabili puntatore sono variabili che memorizzano l'indirizzo. A differenza delle solite variabili che abbiamo come int, double e char memorizza gli indirizzi di memoria. Per facilitare la programmazione, sorge la necessità di questa variabile. È una variabile che può memorizzare un valore di un tipo particolare.
DichiarazioneLa dichiarazione di una variabile di riferimento C ++ viene fatta aggiungendo un simbolo '&' prima di una variabile. Quando viene utilizzato con un'espressione, indica che sta funzionando come indirizzo dell'operatore. Viene utilizzato per fornire un altro nome a una variabile esistente.
Sintassi:
type & newName = esistentiName ;
// o
type & newName = esistentiName ;
// o
type & newName = esistentiName ;
Ad esempio:
/ * Dichiarazione di riferimento del test e inizializzazione * /
#includere
usando lo spazio dei nomi std;
int main () (
string name = "Priya"; // Dichiara una variabile di stringa chiamata name
string & refName = name; // Dichiara un riferimento (alias) al nome della variabile
// Sia refName che name si riferiscono allo stesso valore di "Priya"
cout << nome << endl; // Stampa il valore della variabile "Priya"
cout << refName << endl; // Stampa il valore di riferimento "Priya"
Ora cambia il valore di Nome
refName = "Karishma"; // Riassegna un nuovo valore a refName
cout << refName << endl;
cout << nome << endl; // Il valore del numero cambia anche "Karishma"
name = "Snehal"; // Riassegna un nuovo valore al nome
cout << namer << endl;
cout << refName << endl; // Il valore di refName cambia anche "Snehal"
)
Ciò significa che i valori di una variabile di riferimento possono essere modificati nell'originale e nella copia della variabile.
Prima di utilizzare un puntatore in qualsiasi punto del programma, è necessario dichiararlo in anticipo. Per dichiarare un puntatore e far sapere al sistema che si tratta di un puntatore, una variabile è preceduta da un '*'. Un puntatore è accompagnato da un tipo di dati che può essere un int o un doppio, ecc.
Sintassi:
digitare * pntr ; // Dichiara una variabile puntatore chiamata pntr come puntatore di tipo
// o
digitare * pntr ;
// o
digitare * pntr ;
Ad esempio:
int * newPtr; // Dichiara una variabile puntatore chiamata newPtr che punta a un int (un puntatore int)
Questo puntatore conterrà l'indirizzo. Quell'indirizzo ha un valore int.
double * newdPtr; // Dichiara un doppio puntatore
* Indica che un puntatore viene dichiarato e non funge da operatore.
riassegnazioneNon è possibile riassegnare una variabile di riferimento.
Esempio:
int x = 5;
int y = 6;
int & r = x;
Un puntatore può essere riassegnato e questa proprietà è utile quando uno sviluppatore sta implementando strutture di dati come elenchi collegati, alberi, ecc.
Esempio:
int x = 5;
int y = 6;
int * p;
p = & x;
p = & y;
Indirizzo di memoriaUna variabile di riferimento condivide lo stesso indirizzo della variabile originale. Questi riferimenti possono essere passati a funzioni diverse, possono essere memorizzati in classi diverse, ecc. Un riferimento non punta mai a una nuova variabile fino a quando la vecchia non viene eliminata o non rientra nell'ambito.Un puntatore ha un proprio indirizzo di memoria e lo memorizza nello stack. Un puntatore è una variabile indipendente e può avere nuovi valori assegnati a se stesso.
Valore nulloA un riferimento non può essere assegnato un valore nullo.Un puntatore può avere un valore nullo assegnato direttamente.
argomentiÈ possibile fare riferimento a una variabile di riferimento bypass per valore. Qui gli argomenti vengono passati per valore alle funzioni. Viene creato un clone e inviato alla funzione che lo utilizza. Le modifiche apportate alla copia non hanno alcun effetto sulla variabile originale.Quando desideriamo modificare la copia originale, è possibile farlo passando un puntatore dell'oggetto nella funzione. Questo è noto come pass per riferimento.
Quando usareI riferimenti accedono indirettamente a una variabile. Considera il seguente esempio:
giorno enum
(
Domenica lunedì, …
);
Se definiamo una variabile
giorno x;
E vogliamo sovraccaricare un operatore all'istruzione, quindi possiamo scrivere come di seguito:
day & operator ++ (day & d)
(
d = (giorno) (d + 1);
ritorno d;
)
In breve, questo può essere usato nei parametri di funzione e nei tipi di riferimento.
L'uso dei puntatori è senza alcuna pre-dichiarazione.
operatore day * ++ (giorno * d);
Questo può essere usato per implementare strutture di dati e operazioni aritmetiche con i puntatori.

Conclusione: riferimento C ++ vs puntatore

C ++ Reference vs Pointer sono difficili da lavorare ma migliorano notevolmente l'efficienza del programma. Entrambi C ++ Reference vs Pointer hanno i loro usi e servono i loro scopi. È possibile utilizzare i puntatori quando si desidera implementare strutture di dati e algoritmi mentre i riferimenti quando si desidera utilizzare funzioni e parametri con tipi restituiti.

Articolo raccomandato

Questa è stata una guida alle principali differenze tra riferimento C ++ e puntatore. Qui discutiamo anche le differenze chiave tra riferimento C ++ e puntatore con infografica e tabella comparativa. Puoi anche dare un'occhiata ai seguenti articoli per saperne di più -

  1. Differenze tra Python e C ++
  2. Prestazioni C vs C ++ - Migliori differenze
  3. MongoDB vs Cassandra
  4. Mobx vs Redux
  5. C ++ Vector vs Array: differenze principali
  6. MongoDB vs DynamoDB: funzioni
  7. MongoDB vs SQL: quali sono le funzioni
  8. C vs C #: funzioni

Categoria: