Un po' si
ti consiglio di leggere le pillolle di saggezza presenti in cima al forum.
Comunque per farla molto breve distinguiamo inanzitutto tra un puntatore ed un reference: i puntatori sono gli unici usabili in C, i reference sono stati introdotti in C++ per ridurre la complessità di usare i puntatori essenzialmente per implementare il passaggio 'by reference' che in C era possibile solo usando i puntatori.
Per dichiarare un puntatore usi come hai detto l'operatore * es: int *v; per ottenere l'indirizzo di una variabile, e quindi ottenere un puntatore, usi l'operatore &.
Per i reference si usa invece ancora l'operatore & nella dichiarazione es: int &v, reference ad un intero. I reference hanno poi parecchi vincoli d'uso.
Per dichiarare muovi con un reference a questo usi: void muovi(int x, int y, Box &b). Per chiamarla non fai altro che passare un istanza di tipo Box es:
codice:
Box tmp_box;
muovi(1, 2, tmp_box);
Con i puntatori avresti definito: void muovi(int x, int y, Box *b) e la chiamata:
codice:
Box tmp_box;
muovi(1, 2, &tmp_box);
Ti chiederai perchè sono comodi i reference se in fondo bastavano i puntatori? Prima di tutto è che se usi i reference eviti il controllo che qualcuno ti passi un puntatore non inizializzato, in quanto un reference è garantito che si riferisca a qualcosa...con i puntatori puoi ad esempio fare così e si schianta tutto:
Box *tmp_box;
muovi(1, 2, tmp_box);
Secondo ti potresti chiedere perchè usare i reference ed i puntatori se in fondo non vuoi modificare il parametro (cioè non hai necessità del passaggio by reference): è una questione di ottimizzazione...passare un parametro così:
codice:
void muovi(int x, int y, Box b);
Box tmp_box;
muovi(1, 2, tmp_box);
funziona lo stesso ma viene invocato il costruttore di copia e se non l'hai definito ne viene creato uno di default e non sempre fa quello che dovrebbe. Ecco perchè in questi casi (es. muovi) la dichiarazione corretta è:
codice:
void muovi(int x, int y, const Box &b);
dichiarata così non fai altro che usare i vantaggi del by reference (niente copie e parametri temporanei inutili) garantendo che non modifichi l'istanza passata.
Spero di averti chiarito un poco di più le idee...comunque leggi le pillole