Così facendo nel primo programma stai semplicemente invertendo a cosa puntano a e b all'interno del metodo! Non stai modificando il valore della variabile, per fare ciò devi deferenziare i puntatori:
codice:
*temp=*b;
*b=*a;
*a=*temp;
Così dovrebbe fungere.