В чем разница между этими двумя значениями в распределении памяти.
char *p1 = "hello";
char p2[] = "hello";
Ответ 1
Первый создает переменную-указатель (четыре или восемь байтов хранения в зависимости от платформы) и сохраняет там место строкового литерала. Второй создает массив из шести символов (включая байт-ограничитель нулевой строки) и копии там буквально.
Вы должны получить предупреждение компилятора в первой строке, так как литерал const.
Ответ 2
Первый - это неконстантный указатель на данные const (только для чтения), второй - неконстантный массив.
Ответ 3
Поскольку первый - это неконстантный указатель на данные const (только для чтения), второй - неконстантный массив, как сказал Пол, вы можете написать:
p2[2]='A'; //changing third character - okay
Но вы не можете написать:
p1[2]='A';//changing third character - runtime error!