TL; DR Ответ:
sizeof result
такой же, как sizeof(char)
.
sizeof(num1+ num2)
такой же, как sizeof (int)
Почему?
В вашем случае, они производят 1 (гарантированное стандарт) и 4 (может изменяться), соответственно.
Это говорит, sizeof
дает результат типа size_t
, так что вы должны %zu
спецификатора формата для печати значения.
Почему:
Во-первых, для добавления оператора +
, цитируя C11
, глава §6.5.6
Если оба операнда имеют арифметический тип, обычные арифметические преобразования на их.
Что касается обычных арифметических преобразований, §6.3.1.8/p1
[....] В противном случае, целые акции выполняются на обоих операндов. [...]
, а затем из §6.3.1.1,/р2,
Если int
может представлять все значения исходного типа (как ограниченное по ширине, для битового поля), значение преобразуется в int
; в противном случае он преобразуется в unsigned int
. Они называются целыми рекламными акциями.
Таким образом, sizeof(num1+num2)
- это то же самое, что и sizeof(int)
.
'sizeof (num1 + num2)' логически ошибочно. – i486
@ i486 Что значит? – Jin
@jwqwerty: Нелогично неправильно, но бесполезно, поскольку вы получаете размер временного объекта, который существует только на время определения его размера. В повседневном использовании вы будете искать 'sizeof (num1) + sizeof (num2)', если вы, например, хотите выделить пространство для сериализации данных. –