TL; DR Antwort:
sizeof result
ist die gleiche wie sizeof(char)
.
sizeof(num1+ num2)
ist das gleiche wie sizeof (int)
warum?
In Ihrem Fall erzeugen sie 1 (Standard garantiert) und 4 (kann variieren), respectively.
Das heißt, sizeof
ein Ergebnis vom Typ erzeugt size_t
, so sollten Sie %zu
Formatspezifizierer den Wert zu drucken.
Warum:
Zuerst für den Additionsoperator +
unter Angabe C11
, Kapitel §6.5.6
Wenn beide Operanden haben arithmetischen Typ, die üblichen arithmetischen Umwandlungen durchgeführt werden, auf sie.
In Bezug auf üblichen arithmetischen Umwandlungen, §6.3.1.8/p1
[....] Ansonsten sind die integer Promotions auf beiden Operanden durchgeführt. [...
]
und dann von §6.3.1.1,/p2,
Wenn ein int
alle Werte der Vorlagenart darstellen kann (wie durch die Breite beschränkt, für eine Bitfeld), der Wert wird in eine int
umgewandelt; Andernfalls wird es in eine unsigned int
konvertiert. Diese werden Integer-Promotionen genannt.
So ist sizeof(num1+num2)
das gleiche wie sizeof(int)
.
'sizeof (num1 + num2)' ist logisch falsch. – i486
@ i486 Was meinst du? – Jin
@jwqwerty: Nicht logisch falsch, aber nutzlos, da Sie die Größe eines temporären Objekts erhalten, das nur für die Dauer der Größenbestimmung existiert. Im täglichen Gebrauch suchen Sie nach "sizeof (num1) + sizeof (num2)", wenn Sie z. möchte Speicherplatz zuweisen, um die Daten zu serialisieren. –