A causa di C di serie integral promotion rules, il tipo dell'espressione c + i
è int
, quindi è per questo che stai ricevendo l'equivalente di sizeof (int)
.
Nota che sizeof
non è una funzione, le parentesi sono necessarie solo quando si nomina un tipo and to resolve precendence conflicts. Il tuo codice coule essere scritto:
printf("%zu, %zu, %zu\n", sizeof i, sizeof c, sizeof (c + i));
L'uso finale di sizeof
ha parentesi dal sizeof
si lega più stretto di +
, dicendo sizeof c + i
sarebbe essere analizzato come (sizeof c) + i
che non è il risultato desiderato.
Si noti inoltre che è un costrutto in fase di compilazione per la maggior parte del tempo, l'espressione non viene mai effettivamente valutata. Tutto ciò che accade è che il compilatore "pretende" di valutarlo, di capire il tipo di espressione e quindi ti dà la dimensione di un valore di quel tipo. Il valore attuale non ha mai bisogno di esistere, che a volte è pulito.
Il tipo del valore restituito da sizeof
è size_t
, che viene stampata con %zu
(non è int
).
'sizeof 'è un costrutto di tempo di compilazione. –
la dimensione del risultato è calcolata come int – BLUEPIXY
Non hai ancora detto che sizeof (c + c) darà anche 4, quindi sarà sizeof (c/2) o sizeof (1998) – Kartikya