Quando fai *b non è b che contiene il valore 3, ma il valore puntato da b ovvero la variabile passata a parametro.

La cella puntata prima da b rimane invariata, sarà il puntatore a puntare da un'altra parte.
Praticamente, col solito disegnino

codice:
------            -----------------------------
b     --------->  variabile passata a parametro
------            -----------------------------
       \
        \
         \
          \
      ----------
   a passato a parametro ma per valore
      ----------
Come vedi b punta alla variabile b passata a riferimento, che viene modificata, quando b punterà ad a punterà da un'altra parte, b non ha valore, contiene l'indirizzo della varaibile.

Quasta volta spero di essermi spieto meglio