TL; DR réponse:
sizeof result
est le même que sizeof(char)
.
sizeof(num1+ num2)
est la même que sizeof (int)
pourquoi?
Dans votre cas, ils produisent 1 (garanti par la norme) et 4 (peut varier), respectivement.
Cela dit, sizeof
produit un résultat de type size_t
, vous devez donc spécificateur de format %zu
pour imprimer la valeur.
Pourquoi:
Tout d'abord, pour l'opérateur d'addition +
, citant C11
, chapitre §6.5.6
Si les deux opérandes sont de type arithmétique, les conversions arithmétiques habituelles sont effectuées sur eux.
En ce qui concerne habituelles conversions arithmétiques, §6.3.1.8/p1
[....] Dans le cas contraire, les promotions entières sont effectuées sur les deux opérandes. [...]
puis de §6.3.1.1,/p2,
Si un int
peut représenter toutes les valeurs du type d'origine (tel que limité par la largeur, pour une champ binaire), la valeur est convertie en int
; sinon, il est converti en unsigned int
. Ceux-ci sont appelés les promotions entières .
Donc, sizeof(num1+num2)
est la même que sizeof(int)
.
'sizeof (num1 + num2)' est logiquement incorrect. – i486
@ i486 Que voulez-vous dire? – Jin
@jwqwerty: Pas logiquement faux en soi, mais inutile, car vous obtenez la taille d'un objet temporaire qui n'existe que pour la durée de la détermination de sa taille. Dans l'utilisation quotidienne, vous rechercheriez 'sizeof (num1) + sizeof (num2)' si vous le souhaitez. vouloir allouer de l'espace pour sérialiser les données. –