In C-Sprache werden Operanden fast aller arithmetischen Operatoren impliziten Konvertierungen unterworfen, die üblichen arithmetischen Konvertierungen oder in diesem Fall Integer-Promotions genannt werden. Operanden vom Typ char
werden zum Typ int
hochgestuft und die tatsächliche Addition wird innerhalb der Domäne int
(oder unsigned int
, abhängig von den Eigenschaften von char
auf dieser Plattform) ausgeführt. Ihr a + b
wird also tatsächlich als (int) a + (int) b
interpretiert. Das Ergebnis hat den Typ int
und sizeof(int)
ist anscheinend 4 auf Ihrer Plattform. Das ist 4 was du siehst.
Und verwenden Sie nicht %d
bis printf
das Ergebnis von sizeof
. Das Ergebnis von sizeof
hat den Typ size_t
, während %d
ein Argument int
benötigt. Verwenden Sie also entweder den richtigen Formatbezeichner
oder zumindest das Argument, wenn Sie sicher sind, dass es passt
%Vor% Dies ist nicht dasselbe wie sizeof(char)
, das Argument ( d. h. das Ergebnis der Addition ) wird auf int
hochgestuft, sodass sizeof(a + b)
tatsächlich sizeof(int)
entspricht. Wenn Sie das Ergebnis in char
umsetzen, wird es erwartet. Der korrekte Formatbezeichner für sizeof
result ist size_t
und %zu
.
Versuchen Sie
%Vor%