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