Верны ли следующие задания? Или любой из них создаст проблемы. Пожалуйста, предложите.
const char * c1;
const char * c2;
const char * c3;
char * c4;
c2 = c1;
c2 = c3;
c2 = c4;
Что, если я сделаю следующее, это нормально?
const char * c5 = "xyz";
char * c6 = "abc";
c2 = c5;
c2 = c6;
Ответ 2 · рейтинг 9 · Mahesh
Все являются допустимыми утверждениями, поскольку вы не разыменовываете их, потому что все указатели остаются неинициализированными или не указывают на какие-либо допустимые области памяти.
И они действительны, потому что указатель не является постоянным, но значение, на которое указывает указатель, является постоянным. Таким образом, указатели здесь можно переназначить, чтобы они указывали на другое место.
Ответ 3 · рейтинг 3 · David Heffernan
Все эти задания совершенно правильны, как я и другие объяснили в вашей недавней серии почти идентичных вопросов.
const char* - это указатель на память, которую нельзя изменить с помощью этого указателя. Ничто здесь не может обойти это. Компилятор будет возражать, если вы присвоите c4 = c1, так как это позволит обойти константу.
Ответ 4 · hege
Все они допустимы, единственная проблематичная строка - char * c6 = "abc";: здесь "abc" - константный литерал, поэтому присваивать его неконстантному указателю небезопасно и должно, по крайней мере, генерировать предупреждение, если не ошибку компиляции (я не попробуй собрать).