La spiegazione potrebbe andare per le lunghe, ma riduciamola all'osso.
Tu hai un oggetto, diciamo un intero
int i = 0;
Di
i vuoi avere il puntatore:
int i = 0;
int* p = &i;
Ora vuoi usare il puntatore
p per modificare il valore dell'oggetto puntato (in questo caso
i)
int i = 0;
int* p = &i;
*p = 1;
printf("i = %d, *p = %d\n", i, *p);
Quanto vale
i e quanto vale
*p? Ovviamente ENTRAMBI 1!
Ora, diciamo che ti
scoccia dover ogni volta
deferenziare un puntatore, ma vuoi che lo faccia direttamente il compilatore.
In questo caso, invece del puntatore, prendi il
reference: e' sempre un puntatore, ma che il compilatore AUTOMATICAMENTE dereferenzia:
int i = 0;
int* p = &i;
*p = 1;
printf("i = %d, *p = %d\n", i, *p);
int& r = i;
r = 2;
printf("i = %d, *p = %d, &r=%d\n", i, *p, r);
Una proprieta' (a meno di non fare giochi di prestigio) e' che un reference non puo' mai essere
nullpr, perche' NON PUOI prendere i reference del puntatore nullo, e non puoi assegnare ad un reference un puntatore nullo.
(Vabbe, si puo' fare, ma e' giocare sporco )