Not sure I understand the use of const either...
If you treat const as strictly left-associative, the ambiguous case is eliminated.
const char * p = "hello";
...don't use this one.
char const * p = "hello";
...char is to the left of const so the char part of the type is constant. p can be changed (point to a different address) but the data it points to cannot be changed.
char * const p = "hello";
...* is to the left so the address is constant. p cannot be changed to a different address but the data it points to can be changed.
char const * const p = "hello";
...neither p nor what it points to can be changed. p is a read-only pointer to read-only data.