La parola chiave & funge anche da riferimento:
Ti faccio un esempio:
codice:
#include<iostream>
using namespace std;
void scambia(int a, int b)
{
       int c = a;
       a = b;
       b = c;
       cout << a << ' ' << b < endl;
}
int main()
{
       int a = 10, int b = 20;
       scambia(a, b);
       cout << a << ' ' << b << endl;
       return 0;
}
Se provi a vedere il seguente codice vedrai che dentro la funzione scambia i valori di a e b sono effettivamente scambiati ma, se provi a stamparli nuovamente nel main, questi non risultato scambiati perchè all'atto della chiamata della funzione viene chiamato il costruttore della classe int che crea 2 nuove variabili da usare nella funzione ( ad esempio a_tmp e b_tmp) e all'interno della funzione vengono utilizzate queste.
Prova invece così:
codice:
void scambia(int &a, int &b)
{
      int c = a;
      a = b;
      b = c;
      cout << a << ' ' << b << endl;
}

void main()
{
     int a = 10, b = 20;
     scambia(a, b);
     cout << a ' ' << b << endl;
     return 0;
}
Adesso le due variabili sono effettivamente scambiate peerchè nella funzione sono stati utilizzati i riferimenti, cioè:
prima veniva fatta piu o meno questa operazione:
codice:
void scambia(int a, int b); -> a = a_tmp; b = b_tmp;
Si usavano variabili di appoggio all'interno della funzione.
Mentre con:
codice:
void scambia(int &a, int &b);
Si usano PRORPIO a e b, quindi ogni operazione fatta su queste è effettiva.

Spero di verti fatto capire piu o meno a cosa servono i riferimenti( e quindi un altro uso della &) e di non aver fatto errori di sintatti e battitura.

Chiedi pure se non hai capito