const char *p - here p is pointer to a constant which means using p you cannot change the value of variable.
int main(void)
{
char var1 = '0';
const char* p = &var1;
*p = 'a'; // Invalid operation as p is pointer to a constant
}
char const *p - here p is a constant pointer and cannot change the address its holding. In other words, we can say that once a constant pointer points to a variable then it cannot point to any other variable.
int main(void)
{
char var1[] = {'0','1'};
const char* p = &var1[0];
p++; // Invalid operation as p is a constant pointer
}
const char * const p - here p is a constant pointer to a constant which means that p can not point to another variable neither change the value of the variable it point to.