Was passiert hier? sizeof (short_int_variable + char_variable)

8
%Vor%

Kann mir jemand sagen, was passiert, wenn sizeof (a + b) "a ist kurz int type & amp; b ist char type"     Ausgabe ist: 2, 1, 4

    
hem 07.05.2013, 09:59
quelle

5 Antworten

8

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:

%Vor%

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.

    
unwind 07.05.2013, 10:06
quelle
4
%Vor%     
Mani 07.05.2013 10:03
quelle
1

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

%Vor%

gibt Ihnen 4 Bytes auf 32-Bit-Maschine ..

    
VoidPointer 07.05.2013 10:08
quelle
0

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ück     
Laurijssen 07.05.2013 10:03
quelle
0

Der 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%     
Ali Bahraminezhad 07.05.2013 10:07
quelle

Tags und Links