Можно создать дубликат:
constants and pointers in CConst в C дает непредсказуемым результатам
У меня есть этот маленький кусочек кода. Я использую GCC компилятор:
#include <stdio.h>
int main()
{
const int a=10;
int *d;
d=&a;
*d=30;
printf("%d %d\n",a,*d);
return 0;
}
Это дает предупреждение о компиляции:
"назначение отбрасывает отборочные от целевого указателя типа"
Но никакой ошибки. Выходной сигнал: 30 30
Тогда он не оспаривает цель поддержания константной переменной, значение которой фиксировано во время выполнения программы (пожалуйста, исправьте меня, если я ошибаюсь)?
Еще одна причина, по которой на самом деле не игнорировать предупреждения. Ваш код никоим образом не работает _guaranteed_. На самом деле, я бы сказал, что вам повезло, что он не разбился и не сгорел :) –
Обратите внимание, что ответ на дубликат немного разряжен по стандарту, который не говорит о «readonly memory», только то, и не является (это не так). Компилятор должен решить, где находится 'a'. Неопределенное поведение не означает, что «произойдет ошибка». Это будет определено поведение. –
Как сказал @JoachimIsaksson, это неопределенное поведение. Пожалуйста, сделайте достаточно исследований, прежде чем задавать вопросы о stackoverflow. – CCoder