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.
ISO Sec. 18.104.22.168
Rationale Sec. 22.214.171.124
H&S Sec. 4.4.4 p. 81