Ваша программа демонстрирует неопределенное поведение , что означает: буквально может произойти все, что по-прежнему рассматривается стандартом как неопределенное.И когда я что-то говорю, я имею в виду это в полной мере.Это может быть даже допустимо, если ваш компьютер станет разумным и будет преследовать вас по улице.
Что обычно происходит, но это не оправдано, так это то, что вы пишете в не отображенное адресное пространство (в современной ОС сстраничная память), вызывающая ошибку сегментации или ошибку шины (в зависимости от архитектуры, ОС и реализации времени выполнения).
ptr
- это указатель, унифицированный как единица, то есть значение указателя еще не определено.Неопределенный указатель, по определению, указывает на ничто и все, то есть не на действительный объект вообще.Единственный способ сделать этот указатель действительным - это присвоить ему адрес соответствующего объекта C того типа, на который ссылается указатель.
Кстати: на простом языке C очень и очень строгие правила печати.Я иногда говорю, что он даже строже, чем C ++, потому что в нем отсутствуют оператор неявного преобразования и перегрузка функций.Но его небрежное приведение типов и плохие компиляторы разрушили его репутацию в отношении безопасности типов.