allora sostanzialmente la referenza è più comoda da usare se non devi lavorare sul puntatore....
nel senso che se passi una struttura, se passi un puntatore devi usare -> per accedere ai suoi valori; se usi un reference basta il .

Tuttavia, con il tempo ci si accorge che occorre definire uno standard, per permettere ad altri (o anche a noi stessi a distanza di tempo) di capire il codice che abbiamo scritto.

Per questo è preferibile utilizzare i puntatori perchè, anche nella chiamata della funzione risulti evidente che quella funzione modificherà il valore della variabile passata.

Per esempio:

codice:
 
typedef struct esempio{....};
struct esempio prova;

void funzionepunt(struct esempio *punt){....}

void funzioneref(struct esempio &ref){.....}

int main(){
    // si capisce che passa un puntatore, e che quindi ci sarà la modifica di prova
     funzionepunt(&prova);
     //è uguale alla chiamata con passaggio per valore
     //leggendo si potrebbe capire che prova è passata per valore e che quindi non verrà modificata dalla funzione
     funzioneref(prova);
}
spero si capisca quello che intendo.