There are two separate things here, a pointer and the data it points to, and const
can be used for either or both.
Example without const
char *p = "hello";
++p; // changes the pointer, now points to 'e'
*p = 'u'; // changes the data, now "hullo"
Examples with const
As @tc says, read the declaration backwards.
1 You can change the pointer, but not data it points to
// these two declarations have the same effect
char const *p = "hello"; // pointer to constant char
const char *p = "hello"; // pointer to char which is constant
++p; // ok
*p = 'u'; // wont' compile
2 You can change "hello", but not the pointer
char * const p = "hello"; // constant pointer to char
++p; // wont' compile
*p = 'u'; // ok
3 You can make both immutable
char const * const p = "hello"; // constant pointer to constant char
++p; // wont' compile
*p = 'u'; // wont' compile