ciao.
Ho una mezza lacuna sui riferimenti , li uso ma mi sono fermato a direrova a scrivere cosa sono , e li' ho capito che non li ho ancora compresi a fondo.sono abituato ad usarli nella dichiarazione dei parametri delle funzioni per far si che i cambiamenti all'interno della funzione persistano anche all ' esterno ad es semplificato:

codice:
void change(*p1,*p2)
{
 *p1=1;
 *p2=2;
}

main
{
   int p1,p2;
   p1=p2=0;

   change(&p1,&p2)
//p1=1 ,p2 = 2
}
un altro caso in cui si usano i riferimenti è il costruttore di copia:
codice:
class Z
{
public:
   Z();
   Z(Z& other);  
  
}
di cui non riesco bene a capire la sintassi:
"passa il riferimento di un oggetto gia' esistente di tipo Z" ???
è cosi?perchè?...
ho capito il fatto del gia esistente , in quanto questo costruttore serve innanzitutto per fare la deep copy di un oggetto a partire da un altro oggetto dello stesso tipo , e si rende esplicito nei casi non si abbiano oggetti solo con tipi primitivi(come int o char), ad es se ho dei puntatori nella mia classe o delle allocazioni di memoria dinamiche in generale

un altro caso che non ho capito bene è questo:
z(Z*& varPar)
in cui mi avete aiutato gia' abbondantemente su questo forum , ma che non ho ancora assimilato del tutto.

Grazie.