Мой вопрос: почему изменяется значение переменной a, хотя я объявил его как const? Извините, если это тривиальный вопрос.Const не const?
const int a = 8;
int* ptr = &a;
printf("variable: %d \n", a);
printf("pointer: %d \n", *ptr);
*ptr = 1;
printf("pointer: %d \n", *ptr);
printf("variable: %d \n", a);
Выход: 8 8 1 1
Спасибо и хорошего дня!
Итак, вы спрашиваете, почему код беспорядков, если ** вы ** разорвать контракт ** вы ** гарантированно? Но ваш компилятор должен был предупредить, по какой причине вы проигнорировали это? Примечание: C не имеет символических констант, кроме _enum-constants_. – Olaf
Вообще говоря, стандарт C-языка разрешает кастинг от «указателя на const» до «указателя на неконстантный», поэтому точное поведение программы во время выполнения не определено. Более конкретно, поведение во время выполнения этой программы зависит от компилятора. Если компилятор выделяет константные переменные в сегменте только для чтения исполняемого изображения, тогда при выполнении строки '* ptr = 1' вы получите нарушение доступа к памяти (aka * segmentation fault *). Если он выделяет их в сегменте чтения-записи исполняемого изображения, то эта строка будет выполнена успешно. –