Quel tipo di chiamata si chiama "per riferimento", mentre quello classico (senza gli &) viene chimato "per valore".
Se una variabile viene passata per valore, ne viene effettuata prima una copia, ed è questa copia che viene passata alla funzione. Tutte le modifiche che la funzione chiamata effettuerà su quella variabile non influenzeranno la variabile originaria, ed il risultato di tali modifiche deve essere passato al chiamante con un return.
I passaggi per riferimento invece consentono alla funzione chiamata di accedere, e modificare, direttamente i dati del chiamante, ed infatti nel tuo esempio il tipo di ritorno della funzione è void.
Ti ho confuso ancora di più, vero?![]()