Aufgrund des C-Standards Regeln für integrierte Werbung , der Typ des Ausdrucks c + i
ist int
, deshalb erhalten Sie den Gegenwert von sizeof (int)
.
Beachten Sie, dass sizeof
keine Funktion ist. Die Klammern werden nur benötigt, wenn Sie einen Typ benennen und Präzedenzkonflikte auflösen . Ihr Code könnte geschrieben werden:
Die letzte Verwendung von sizeof
hat Klammern, da sizeof
enger bindet als +
, und sagt, dass sizeof c + i
als (sizeof c) + i
analysiert würde, was nicht das gewünschte Ergebnis ist.
Beachten Sie auch, dass es sich meistens um ein Kompilierungskonstrukt handelt, der Ausdruck wird nie wirklich 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 von sizeof
zurückgegebenen Werts ist size_t
, der mit %zu
(nicht int
) gedruckt wird.
Wie andere bereits gesagt haben, wird sizeof zur Kompilierzeit berechnet.
Hier wird der Wert des Ausdrucks c + i
integer, als c und i werden gefördert (integral promotion) zu int und damit
gibt Ihnen 4 Bytes auf 32-Bit-Maschine ..
sizeof funktioniert nur bei compiletime, um die Größe eines Ausdrucks zu erhalten.
Das Folgende wird nicht wirklich 'c' erhöhen:
c = Größe von (++ c);
Der Ausdruck sizeof (a + b) gibt den größten Typ mit unsigned mit Vorrang
zurückDer Datentyp von a ist "short int". -32768 ~ +32767
Der Datentyp von c ist "char". 0 ~ 255
Wenn Sie a zu c hinzufügen, ist es weder short int noch char , es wird int !
Hier ist ein Beispielcode, der Ihnen hilft, den variablen Datentyp zu erhalten:
%Vor%