const
относится к указанным символам, а не к самому указателю!Таким образом, вы можете указать на любую C-строку, которую вы хотите, но не можете изменить символ этих строк.
Для простоты примера я буду использовать другой тип для иллюстрации точки (C-строковые литералы не могут быть изменены):
У вас на самом деле есть что-то вроде этого
const int i = 666;
const int j = 999;
const int *pi = &i;
pi = &j;
// *pi=444; is invalid, can't change the int pointed by pi
Вы можете создать указатель, который нельзя изменить, но указатель на int:
int i = 666;
int j = 999;
int *const pi = &i;
*pi = 999;
// pi = &j; is invalid, pi will always point to i
И затем вы можете смешать оба, никогда не меняйте ни указатель, ни указатель на int:
const int i = 666;
const int j = 999;
const int *const pi = &i;
// pi = &j; is invalid
// *pi = 444; is invalid