Una variabile puntatore è una variabile che contiene l'indirizzo di memoria di un'altra variabile. Ad esempio, si supponga di avere una variabile intera chiamata x ed un'altra variabile (quella puntatore appunto) chiamata p_x che è in grado di contenere l'indirizzo di una variabile di tipo int. In C++, per conoscere l'indirizzo di una variabile, è sufficiente far precedere al nome della variabile l'operatore &. La sintassi per assegnare l'indirizzo di una variabile ad un'altra variabile è la seguente:
p_x = & x;
In genere, quindi, una variabile che contiene un indirizzo, come ad esempio p_x, viene chiamata variabile puntatore o, più semplicemente, puntatore. Per chiarire ulteriormente questo concetto, guardiamo la figura seguente:
Supponiamo che la variabile intera x, raffigurata nel riquadro di sinistra, sia allocata all'indirizzo di memoria 7500. La variabile p_x, ovvero la variabile puntatore, inizialmente non contiene alcun valore (ovvero nessun indirizzo).
Nel momento in cui viene eseguita l'istruzione:
p_x = & x;
la variabile puntatore conterrà l'indirizzo della variabile x. Cioè:
La freccia viene tracciata dalla cella che conserva l'indirizzo verso la cella di cui si conserva l'indirizzo.
Per accedere al contenuto della cella il cui indirizzo è memorizzato in p_x è sufficiente far precedere alla variabile puntatore il carattere asterisco (*). In tal modosi è deindirizzato il puntatore p_x.
Ad esempio, se si prova ad eseguire le due istruzioni seguenti:
p_x = & x;
*p_x = 20;
il valore della cella x sarà 20. Graficamente otterremo:
Si noti che se p_x contiene l'indirizzo di x, entrambe le istruzioni che seguono avranno lo stesso effetto, ovvero entrambe memorizzeranno nella variabile x il valore 20:
x = 20;
*p_x = 20;