Perchè al regolamento?O_o comunque è vero ho provato facendo

#include<iostream>
using namespace std;
void swap(int &x,int &y)
{
int z;
z=x;
x=y;
y=z;
}
int main()
{
int a,b;
cout<<"inserisci due valori\n";
cin>>a>>b;
cout<<"quindi a="<<a<<"e b="<<b<<"\n";
swap(a,b);
cout<<"ora a="<<a<<"e b="<<b<<"\n";
system("pause");
return 0;
}

e ora effettivamente mi mostra lo scambio,ma quindi senza il passaggio per indirizzo a che serve una procedura di questo tipo?(abbiate pazienza XD) quindi chiamando per riferimento viene modificato l'indirizzo del parametro effettivo,di conseguenza,ci verrà fuori il valore collegato a quell'indirizzo giusto?in questo caso facendo la chiamata per valore non mi viene fuori niente perchè parte dal presupposto che ci sia un valore che viene restituito,mentre la procedura di valori non può restituirne di per se.Grazie mille.