РЕДАКТИРОВАТЬ: Не отвечайте на вопросы, когда у вас низкий уровень сахара в крови. Ваш мозг (конечно, мой) не работает, как вы ожидаете. :-(
Незначительный придурок:
p - это int32 *, тогда p + 1
неверно, он должен быть без знака int32, иначе он будет обернут в 2 ГБ.
Интересная странность - я получил это от автора компилятора C для чипа Transputer - он сказал мне, что для этого компилятора NULL был определен как -2 ГБ. Зачем? Потому что у Transputer был диапазон адресов со знаком: от -2 ГБ до + 2 ГБ. Вы можете в это поверить? Удивительно, не правда ли?
С тех пор я встречал разных людей, которые говорили мне, что определение NULL как этот не работает. Я согласен, но если вы этого не сделаете, указатели NULL окажутся в середине диапазона адресов.
Я думаю, что большинство из нас может радоваться, что мы не работаем над Transputers!