Aufgrund der C-Standard integral promotion rules, die Art des Ausdrucks c + i
int
ist, so dass, warum bist du immer das Äquivalent von sizeof (int)
.
Beachten Sie, dass sizeof
keine Funktion ist, die Klammern werden nur benötigt, wenn ein Typ and to resolve precendence conflicts benannt wird. Ihr Code coule geschrieben werden:
printf("%zu, %zu, %zu\n", sizeof i, sizeof c, sizeof (c + i));
Die endgültige Verwendung von sizeof
Klammern hat seit sizeof
fester bindet als +
, sagen sizeof c + i
als (sizeof c) + i
analysiert werden würde, die nicht das gewünschte Ergebnis.
Beachten Sie auch, dass es ein Kompilierzeitkonstrukt die meiste Zeit ist, der Ausdruck wird nie tatsächlich ausgewertet. Alles, was passiert, ist, dass der Compiler "vorgibt", ihn auszuwerten, den Typ des Ausdrucks herauszufinden und Ihnen dann die Größe eines Wertes dieses Typs zu geben. Der tatsächliche Wert muss nie existieren, was manchmal ordentlich ist.
Der Typ des durch sizeof
zurückgegebene Wert ist size_t
, die %zu
gedruckt wird (es ist nicht int
).
'sizeof 'ist ein Kompilierzeit-Konstrukt. –
Größe des Ergebnisses berechnet als int – BLUEPIXY
Sie haben noch nicht erwähnt, dass die Größe von (c + c) auch 4 ergibt, also wird sizeof (c/2) oder sizeof (1998) – Kartikya