инициализация массива строк
Вопрос
Это продолжение еще одного моего вопроса , который у меня возник.
Рассмотрим следующий код:
GenracodicetagpreК моему удивлению, он не компилируется (видимо, я не знаю синтаксиса C так хорошо, как думал) и генерирует следующую ошибку:
GenracodicetagpreЕсли я заменю char * на char [], он будет компилироваться нормально:
GenracodicetagpreМожет кто-нибудь объяснить мне, почему?
Решение
В первом примере (char *hi = "hello";
) вы создаете неконстантный указатель, который инициализируется, чтобы указывать на статическую константную строку «hello».Теоретически этот указатель может указывать на что угодно.
Во втором примере (char hi[] = "hello";
) вы конкретно определяете массив, а не указатель, поэтому адрес, на который он ссылается, нельзя изменить.Обратите внимание, что массив можно рассматривать как неизменяемый указатель на определенный блок памяти.
Ваш первый пример действительно компилируется без проблем на C ++ (по крайней мере, мой компилятор).