Цитата(Метценгерштейн @ Nov 12 2014, 23:00)

мы же может переменной char i = 56; сделать?
56 - int, мы же не приводим ее к типу char?
Еще раз, указатель по сути - это не одно число, а два (адрес и размер переменной).
Привести одно целое число 56 к целому же типу char по умолчанию вполне возможно, т.к. в обоих случаях это одно число.
Привести же одно число к двойному без явного указания на размер невозможно.
Кстати, неявные правила приведения типов - один из недостатков Си, порождающий много багов. И поэтому, в частности, в С++ имеется более строгий контроль соответствия, хотя и там возможно
char i = 56Так что ваша логика-недоумение понятны вам (и мне): если в левой части стоит указатель на int32, то правую часть стоит автоматически привести к этому типу. Но хороший стиль программирования должен исключать двусмысленности.
В вашем же примере:
p = 0x40023800 + 0x1C кто поймет, что первое число - адрес, а второе - модификатор?