In C operandi linguistiche quasi tutti gli operatori aritmetici sono sottoposti a conversioni implicite chiamati conversioni aritmetiche abituali o, in questo caso, promozioni interi. Gli operatori di tipo char
vengono promossi a tipo int
e l'aggiunta effettiva viene eseguita all'interno del dominio di int
(o unsigned int
, a seconda delle proprietà di char
su quella piattaforma). Quindi il tuo a + b
viene interpretato come (int) a + (int) b
. Il risultato è tipo int
e sizeof(int)
è apparentemente 4 sulla tua piattaforma. Quel 4 è quello che vedi.
E non utilizzare %d
a printf
il risultato di sizeof
. Il risultato di sizeof
ha tipo size_t
, mentre %d
richiede un argomento int
. Quindi, o utilizzare l'identificatore di formato corretto
printf("%zu\n", sizeof(a+b));
o almeno lanciare l'argomento se si è sicuri che si adatta
printf("%d\n", (int) sizeof(a+b));
Cosa si aspetta? Che cosa hai letto sull'operatore 'sizeof'? –
Mi aspettavo che restituisse 1. So che restituisce la dimensione di un tipo o una variabile in byte, più esattamente il numero di caratteri che possono esserci. – Nebeski
'a + b' è una valutazione intera. –