Q: What's the difference between const char *p, char const *p, and char * const p?
A: The first two are interchangeable; they declare a pointer to a constant character (you can't change any pointed-to characters). char * const p declares a constant pointer to a (variable) character (i.e. you can't change the pointer).
Read these declarations ``inside out'' to understand them; see question 1.21.
References:
ISO Sec. 6.5.4.1
Rationale Sec. 3.5.4.1
H&S Sec. 4.4.4 p. 81