Распределение памяти char * и char []

В чем разница между этими двумя значениями в распределении памяти.

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!