Quelles différences entre ces 3 définitions d'une fonction qui permute les valeurs des deux variables ?

fct(int *, int *);

fct(int &, int &);

fct(int a, int b);

Merci