ciao milefori,
int a (variabile di tipo int)
a = 9 (assegnazione del valore 9 alla variabile a)
int *m (costruttore del puntatore di tipo int chiamato m)
m=&a (passaggio dell'indirizzo di memoria di a al puntatore m)
a sto punto se fai un :
Serial.print(m);
lui non ti stampa 9 ma una cosa del tipo 0x3456 che è l'indirizzo di a
*m = 10 (assegni all'indirizzo rappresentato da m il valore 10...ma m avrà sempre valore 0x3456)
se adesso fai:
Serial.print(a);
ti stamperà 10
...e spero di non aver scritto boiate.
EDIT: nella funzione fn1...hai la variabile a che è locale, in quanto creata internamente, e b che è globale in quanto esiste solo quella nello sketch; le variabili vengono incrementate tramite il ++ ad ogni chiamata della funzione stessa nello sketch.