TL; DR risposta:
sizeof result
è lo stesso come sizeof(char)
.
sizeof(num1+ num2)
è uguale a sizeof (int)
perché?
Nel tuo caso, essi producono 1 (garantito da standard) e 4 (può variare), rispettivamente.
Detto, sizeof
produce un risultato di tipo size_t
, così si dovrebbe %zu
di formato per stampare il valore.
Perché:
Innanzitutto, per l'operatore addizione +
, citando C11
, capitolo §6.5.6
Se entrambi gli operandi hanno tipo aritmetico, vengono eseguite le usuali conversioni aritmetiche su loro.
Riguardo conversioni aritmetiche abituali, §6.3.1.8/p1
[....] In caso contrario, le promozioni interi vengono eseguite su entrambi gli operandi. [...]
e poi da §6.3.1.1,/p2,
Se un int
può rappresentare tutti i valori del tipo originale (come limitato dalla larghezza per un campo bit ), il valore viene convertito in int
; in caso contrario, viene convertito in unsigned int
. Queste sono chiamate promozioni per numero intero .
Quindi, sizeof(num1+num2)
è lo stesso di sizeof(int)
.
fonte
2016-07-14 07:53:21
'sizeof (num1 + num2)' è logicamente sbagliato. – i486
@ i486 Cosa intendi? – Jin
@jwqwerty: Non logicamente sbagliato di per sé, ma inutile, poiché si ottiene la dimensione di un oggetto temporaneo che esiste solo per la durata della determinazione della sua dimensione. Nell'uso quotidiano, dovresti cercare 'sizeof (num1) + sizeof (num2)' se ad es. voglio allocare spazio per serializzare i dati. –