Ho scritto al volo senza testare:
codice:
int a = 3;
int b = 5;
int r;
int Somma_perValore(int u, int v)
{
int sum;
sum = u + v;
return sum;
}
int Somma_perIndirizzo(int *pu, int *pv);
{
int sum
sum = *pu + *pv
return sum;
}
int Somma_perRiferimento(int& u, int& v)
{
int sum;
sum = u + v;
return sum;
}
// La chiamata:
r = Somma_perValore(a, b); // I valori a,b sono copiati nelle variabili interne u,v.
r = Somma_perIndirizzo(&a, &b); // Solo gli indirizzi di memoria di a,b sono copiati su pu,pv.
r = Somma_perRiferimento(a, b); // Le variabili interne u,v fanno riferimento alla memoria di a,b.
Come diceva MItaly, l'operatore '&' che significa "indirizzo di:" non è da confondere con il tipo "Reference" che è un tipo speciale di puntatore.
L'utilizzo di const è consigliabile per la sicurezza del codice, sarebbe conveniente studiarsi qualche documento sulla pratica del "Const Corectness".
Passare i valori per indirizzo o per riferimento ha anche un'altro vantaggio, quello di poter modificare il contenuto di un oggetto senza doverlo restituire come valore di ritorno della funzione. Ovviamente tale oggetto non va dichiarato come costante, ma si può dichiarare come costante un suo eventuale puntatore, che potrà puntare solo e soltanto a quello stesso oggetto.