Я знаю, что const char *
является указателем на const char, а char *const
является постоянным указателем на символ. Я проверяю это в следующем коде:Изменение строки char * const
const char *s = "hello"; // Not permitted to modify the string "hello"
char *const t = "world"; // Not permitted to modify the pointer t
s = "hello2"; // Valid
// t = "world2"; // Invalid, gives compilation error
// *(s + 1) = 'a'; // Invalid, gives compilation error
*(t + 1) = 'a'; // Why does this not work?
Последняя строка не дает какой-либо ошибки, но заставляет программу прекратить неожиданно. Почему изменение строки, на которую указывает t
, не разрешено?
Вы указываете стандарт, но на самом деле вы не говорите, почему (как) программа заканчивается ошибкой ... Просто говоря ... Elchonon Edelson дает фактическую причину, которая, по моему мнению, является правильным ответом. –
@AlexisWilke. Стандарт предназначен для независимой от платформы, и такие детали зависят от платформы, поэтому стандарт использует такой язык, как неопределенное поведение, для охвата целого ряда моделей поведения, которые включают в себя работу просто отлично, но на нее нельзя положиться. Я добавил более подробную информацию о типичной современной платформе unix. –