Prima di discutere la differenza tra puntatore e riferimento, vediamo prima il significato di questi due termini brevemente. In un programma, i dati occupano memoria. Dovrebbe essere nota l'esatta posizione della memoria in cui i dati sono stati inseriti in un tempo di esecuzione per poterli accedere. Variabili del puntatore e variabili di riferimento sono utilizzati per accedere a questi dati e manipolare gli indirizzi di memoria in cui si trovano. Cioè, sia i puntatori che i riferimenti possono essere usati per riferirsi agli oggetti indirettamente. Sostengono essenzialmente gli indirizzi di memoria come valori. Il differenza fondamentale tra un puntatore e un riferimento è quello un puntatore è una variabile che memorizza l'indirizzo della posizione di memoria di un'altra variabile mentre a riferimento è una variabile che fa riferimento a un'altra variabile. I due meccanismi, il pointer e riferimento, hanno sintassi e utilizzo diversi.
Un puntatore è un oggetto linguaggio di programmazione che memorizza l'indirizzo di memoria di un valore nella memoria informatica.
int i = 5;
int * ptr = & i;
La prima riga definisce una variabile inizializzata con un valore di 5. La seconda riga definisce un puntatore all'indirizzo di memoria della variabile. Qui, il 'ptr' è dichiarato come oggetto di tipo 'puntatore a int' il cui valore iniziale è l'indirizzo dell'oggetto i. In sostanza, la variabile ptr punta a i memorizzando il suo indirizzo di memoria.
Viene chiamato il valore salvato in una posizione di memoria dereferenziazione. L'operatore * è usato per dereferenziare il puntatore. Dopo che le dichiarazioni sono state fatte, l'espressione indiretta * ptr dereferences ptr si riferisce a i.
Per modificare il valore di i, è possibile utilizzare il seguente incarico;
* ptr = 20;
I puntatori possono essere riassegnati per fare riferimento anche a oggetti diversi.
UN puntatore nullo è un tipo speciale di puntatore. Un puntatore nullo viene spesso indicato con 0 o null e non punta a nulla. È buona norma utilizzare un puntatore nullo nel caso in cui non si abbia un indirizzo esatto da assegnare al puntatore. Questo compito può essere utilizzato in operazioni e condizioni logiche.
I puntatori possono essere utilizzato per archiviare e gestire gli indirizzi di memoria allocata dinamicamente. L'implementazione e il controllo di strutture di dati come stack, code ed elenchi possono essere resi efficienti con l'uso di puntatori. Ad esempio, una coda può avere due puntatori; puntatore capo e puntatore a coda. I puntatori possono anche essere utilizzati per passare variabili tramite il loro indirizzo, il che consentirebbe di modificare il valore. La manipolazione diretta della memoria o dei dispositivi mappati in memoria può anche essere gestita usando i puntatori.
I puntatori consentono sia l'accesso protetto che non protetto alla memoria indirizzata. Pertanto, devono essere prese le necessarie precauzioni per verificare che il contenuto di un puntatore sia valido. In caso contrario, il dereferenziamento di un puntatore con un indirizzo di memoria non valido potrebbe causare l'arresto anomalo del programma.
I puntatori sono supportati in linguaggi come C, C ++, Pascal e molti linguaggi di assemblaggio.
pointer un puntando all'indirizzo di memoria associato alla variabile B.
Un riferimento è semplicemente un identificatore alternativo per un valore memorizzato nella memoria. Consente a un programma di accedere indirettamente a un dato particolare.
int i = 5;
int & ref = io;
La prima riga definisce una variabile inizializzata con un valore di 5. La seconda riga dichiara 'ref' come un oggetto di tipo 'riferimento a int' che si riferisce a i. Un riferimento è diverso dai dati stessi dato che un riferimento è implementato come indirizzo fisico del dato particolare che è memorizzato in memoria.
Una volta definito, un riferimento non può essere riassegnato a un nuovo valore. Un riferimento fa sempre riferimento all'oggetto con cui è inizializzato. Nel seguente compito, ref si riferisce ancora a i, ma il valore è ora 20.
ref = 20;
Secondo l'esempio precedente, i riferimenti di dereferenziazione non richiedono alcun operatore.
I riferimenti possono essere utilizzati quando una variabile fa sempre riferimento a un oggetto. Questo perché, a differenza dei puntatori, i riferimenti non possono essere nulli e devono sempre essere assegnati all'inizializzazione. Poiché i riferimenti devono sempre fare riferimento ad alcuni oggetti, rendere tale variabile un riferimento garantisce che il programma funzioni in modo efficiente e corretto. Dato che non ci sono riferimenti null, la validità di una variabile di riferimento non deve essere verificata.
Le variabili di riferimento possono essere utilizzato per passare in modo efficiente i dati di grandi dimensioni come argomenti alle procedure. I riferimenti vengono anche utilizzati nella condivisione di dati di grandi dimensioni tra aree di codice diverse poiché ogni codice mantiene un riferimento ai dati.
Linguaggi di programmazione come C ++, Java, Python, Perl, PHP, Ruby, ecc. Riferimenti di supporto.
Pointer: Un puntatore è l'indirizzo di memoria di un oggetto memorizzato nella memoria di calcolo.
Riferimento: Un riferimento è un identificativo alternativo o un alias per un oggetto.
Pointer: Un puntatore è dichiarato con l'operatore *.
Riferimento: Un riferimento è dichiarato con l'operatore &.
Pointer: Una variabile del puntatore richiede che l'operatore * sia dereferenziato.
Riferimento: Una variabile di riferimento non richiede che nessun operatore venga deferenziato.
Pointer: I puntatori possono essere inizializzati su null. Tali variabili sono chiamate puntatori nulli.
Riferimento: I riferimenti non possono essere inizializzati su null. Non esiste un riferimento nullo. Un riferimento deve sempre fare riferimento a un oggetto.
Pointer: Una variabile puntatore può essere riassegnata per fare riferimento a oggetti diversi.
Riferimento: Una variabile di riferimento non può essere riassegnata. Si riferisce sempre all'oggetto con cui è stato inizializzato.
Pointer: Le variabili del puntatore dovrebbero essere utilizzate quando esiste la possibilità di riferirsi a nulla o quando è necessario fare riferimento a cose diverse in momenti diversi.
Riferimento: Le variabili di riferimento dovrebbero essere usate quando ci sarà sempre un oggetto a cui fare riferimento e quando non è richiesto di usare quella variabile di riferimento per riferirsi a qualsiasi altra cosa che non sia quell'oggetto.
Pointer: Le variabili puntatore possono essere utilizzate per implementare algoritmi e strutture dati.
Riferimento: Le variabili di riferimento possono essere utilizzate nei parametri di funzione e i tipi restituiti definiscono interfacce utili.
Pointer: Linguaggi di programmazione come C, C ++, Pascal e molti strumenti di supporto per il linguaggio assembly.
Riferimento: Linguaggi di programmazione come C ++, Java, Python, Perl, PHP, Ruby, ecc. Riferimenti di supporto.
Cortesia dell'immagine: "Puntatori" di Questo file è stato creato dall'utente: SvenTranslation.Own work.Questa immagine vettoriale è stata creata con Inkscape.(CC BY-SA 3.0) attraverso popolo -