Вы вызываете неопределенное поведение , поскольку тип a/b
(повышен до) double
, который не соответствует спецификатору формата %d
(который ожидает int
).
(Причина, по которой вы видите 0
, возможно, заключается в том, что все байты sizeof(int)
, к которым вы получаете доступ, равны нулю, являясь частью (очень короткой) мантиссы простого числа, такого как 2.5
, и ваша платформа хранит Числа с плавающей запятой как IEEE754 в порядке с прямым порядком байтов:
| <-- * --> // * = sizeof(int)
400 | 4 0000 0000 0000 // == 2.5
S+E | Mantissa
Попробуйте 2./5.
, чтобы увидеть другие результаты.)