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 puntatore | Riferimento C ++ | pointer |
variabili | Un 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. |
Dichiarazione | La 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. |
riassegnazione | Non è 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 memoria | Una 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 nullo | A 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 usare | I 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ù -
- Differenze tra Python e C ++
- Prestazioni C vs C ++ - Migliori differenze
- MongoDB vs Cassandra
- Mobx vs Redux
- C ++ Vector vs Array: differenze principali
- MongoDB vs DynamoDB: funzioni
- MongoDB vs SQL: quali sono le funzioni
- C vs C #: funzioni