Allora o continuo io a non capire, oppure non hai spiegato bene cosa vuoi fare :master:
S dichiari
int x=1, y=2;
Y non sarà mai = 5

codice:
int f(int x, int &z){

z=x+y; // y undlecared (first use this fuction)
return z+1;
}
Il risultato sarà (o meglio potrebbe, se fosse compilabile) = 4...

E poi perchè modifichi il parametro z, se tanto restituisci il risultato alla fine della funzione ?
In questo modo nel main
codice:
 y=f(y,x);
Verrà modificata sia la varibile x che la variabile y... :master:

Forse è meglio se lo spieghi meglio cosa dovrebbe fare il codice