Guarda che scrivere

*a += 2;

e

*x - 1

e' molto differente ...

La prima riga equivale a

*a = *a + 2;

e significa che il risultato della parte a destra dell'uguale sara' assegnato alla variabile puntata e scritta a sinistra. Quindi il valore della variabile puntata, effettivamente, cambia.

Nella riga

*x - 1

invece, non c'e' il simbolo = e quindi il risultato dell'operazione NON sarà conservato nella variabile ma semplicemente restituito al chiamante.