En C++ eso es paso de parametros por referencia. En la segunda funcion cuando le asignes un valor a la variable local a esta se vera reflejada en el parametro que le hayas pasado ya que no sera una copia del parametro sino una referencia.
Ejemplo simple:
Código:
void funcion(int &a)
{
a = 99;
}
void funcion2(int a)
{
a = 150;
}
void funcion3(int *a)
{
*a = 250;
}
int main()
{
int var = 66;
cout << var << endl;
funcion(var);
cout << var << endl;
funcion2(var);
cout << var << endl;
funcion3(&var);
cout << var << endl;
return 0;
}
PD. En el primer caso que planteas te dara un error de compilacion salvo que hagas que el parametro sea int *.