Также неверен первый код.
Вы указываете указателем на int
на объект, определенный как const int
, и изменяете это.Это плохо сформированная программа на C, но компилятор не обнаруживает ошибку (ну, вероятно, она выдаст вам предупреждение).Вы можете ожидать появления ошибок из-за этого, особенно если вы включите оптимизацию (компилятор может предположить, что значение не изменилось).
Код по-прежнему компилируется, поскольку C слабо типизирован и допускает неявное преобразованиемежду несовместимыми типами (в данном случае от const int*
до int*
.
(обратите внимание, что это отличается в C ++, который является более строгим и может привести к ошибке компиляции, если вы попытаетесь выполнить такое преобразование.)