Ich sagte ja derefenzieren (mit *).
Da du a auf die Adresse von b gesetzt hast, ist dies auch der Wert von a.
Angenommen b steht im speicher bei 0x1234567, dann zeigt a auf 0x1234567.
Da du aber den Wert ändern möchtest und nicht die Adresse, auf die a zeigt, musst du nicht die Referenz (Zeigerwert) von a ändern, sondern den Wert und dazu musst du eben derefenzieren.
Ergo:
a = 0x1234567
*(0x1234567) = 15 = Wert(0x1234567)
Mit Pointern kannst du viele schöne Sachen machen.
Ein Dozent sagte mal zu mir: "Pointer sind ein mächtiges Werkzeug".
Ein Grund dafür ist z.b. dass Call by Referenz in C nur mittels Pointer bewerkstelligt werden kann.
Ein anderer Grund ist, dass solche Sachen wie Arrays (Felder) im Endeffekt auch nur Zeiger auf den Speicher sind. Darunter gehören auch strings, welche ein char-Array repräsentieren.
Anmerkungen:
C Referenz -Zeiger-
Zeiger (Informatik ? Wikipedia)
[Edit]
Mal was zum Topic: http://home.fhtw-berlin.de/~junghans/cref/FUNCTIONS/fgets.html