1. Le reference vanno inizializzate subito.
int *punt; //ok
int *punt = &x; //ok
int &ref; //error: references must be initialized
int &ref = x; //ok
2. Una reference non può essere inizializzata a 0 (NULL).
3. Un puntatore ha un indirizzo di memoria proprio. Le reference non hanno indirizzo di memoria e non possono essere quindi puntate (ma si può puntare al valore ad esse associato).
int x, *p = &x, &r = x;
std::cout << &x; //indirizzo di x
std::cout << &p; //indirizzo di p
std::cout << &r; //indirizzo di x
4. Una reference non può essere né const né volatile sebbene possa al contrario indirizzare una variabile qualificata in tal modo. Non può inoltre 'puntare' a void.
Nn mi viene in mente altro :master: