che intendi per raccogliere?
la f riceve un puntatore ad un intero e quindi è in grado di modificare l'intero con istruzioni del tipo:
*x = 10;
all'uscita della f x avrà il valore 10. Se non passi il puntatore ma passi un int
int f(int x){x = 10}
all'uscita da f x avrà il vecchioo valore che aveva prima.
Quindi per modificare una variabile o un oggetto devi passarne il puntatore e accedere all'oggetto con la sintassi: *x
Le reference permettono di passare il puntatore senza pero dover usare al sintassi *x:
viud g(int &x){x = 10}
all'uscita da g x avrà il valore 10