in C-Sprache-Operanden von fast alle arithmetischen Operatoren sind implizite Konvertierungen üblichen arithmetischen Umwandlungen unterworfen genannt oder, in diesem Fall integer aktionen. Operanden vom Typ char
werden zum Typ int
befördert, 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. So wird Ihr a + b
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 was du siehst.
Und verwenden Sie nicht %d
zu printf
das Ergebnis sizeof
. Das Ergebnis sizeof
hat den Typ size_t
, während %d
ein int
Argument erfordert. Also, entweder den richtigen Formatspezifizierer
printf("%zu\n", sizeof(a+b));
oder zumindest werfen das Argument, wenn Sie sicher sind, passt es
printf("%d\n", (int) sizeof(a+b));
Was erwarten Sie? Was haben Sie über den Operator 'sizeof' gelesen? –
Ich erwartete, dass es zurückgibt 1. Ich weiß, dass es die Größe eines Typs oder einer Variablen in Bytes zurückgibt, genauer gesagt die Anzahl der Zeichen, die dort passen. – Nebeski
'a + b' ist eine ganzzahlige Auswertung. –