Вопрос

Это продолжение еще одного моего вопроса , который у меня возник.

Рассмотрим следующий код:

Genracodicetagpre

К моему удивлению, он не компилируется (видимо, я не знаю синтаксиса C так хорошо, как думал) и генерирует следующую ошибку:

Genracodicetagpre

Если я заменю char * на char [], он будет компилироваться нормально:

Genracodicetagpre

Может кто-нибудь объяснить мне, почему?

Это было полезно?

Решение

В первом примере (char *hi = "hello";) вы создаете неконстантный указатель, который инициализируется, чтобы указывать на статическую константную строку «hello».Теоретически этот указатель может указывать на что угодно.

Во втором примере (char hi[] = "hello";) вы конкретно определяете массив, а не указатель, поэтому адрес, на который он ссылается, нельзя изменить.Обратите внимание, что массив можно рассматривать как неизменяемый указатель на определенный блок памяти.

Ваш первый пример действительно компилируется без проблем на C ++ (по крайней мере, мой компилятор).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top