Первые две формы — указатель на const int; третья — неизменяемый указатель на изменяемый int; четвёртая запрещает и переназначение указателя, и изменение значения через него.
Вариации объявлений указателей с const‑квалификатором
Первые две формы — указатель на const int; третья — неизменяемый указатель на изменяемый int; четвёртая запрещает и переназначение указателя, и изменение значения через него.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В примере представлены четыре различных синтаксиса применения const к указателям. Необходимо раскрыть смысл каждой формы: какие данные допускают изменение, какие указатели могут быть переназначены, а также как правильно интерпретировать каждую строку.
int value = 1000;
const int* cont_int_ptr = &value;
int const* int_const_ptr_1 = &value;
int* const int_const_ptr_2 = &value;
const int* const const_int_const = &value;
Ответ
Первые две формы — указатель на const int; третья — неизменяемый указатель на изменяемый int; четвёртая запрещает и переназначение указателя, и изменение значения через него.
В const int* и int const* запись через *ptr запрещена, но ptr можно направить на другой объект. В int* const адрес менять нельзя, зато *ptr = 42 допустимо. В const int* const запрещены оба действия.
Сам value объявлен изменяемым. Поэтому даже при наличии указателя на const его можно изменить напрямую или через другой допустимый указатель: const здесь ограничивает конкретный путь доступа, а не превращает объект навсегда в неизменяемый.