2017-07-26 3 views
-1

Um die Größe der Variablen mit sizeof()Warum gibt sizeof() 4 Byte statt 2 Byte kurzer Int zurück?

#include <stdio.h> 

main() 
{ 
    int a = 10,b = 20; 
    short int c; 
    short int d = sizeof(c = a+b); 
    int e = sizeof(c*d); //e holds the value of 4 rather than 2 
    double f = sizeof(e*f); 
    printf("d:%d\ne:%d\nf:%lf\n",d,e,f); 
} 

Warum ist sizeof() Rückkehr der Größe von int statt short int zu drucken, die 2 Bytes zu verstehen?

+0

Siehe auch: [why sizeof (short + short) hat eine andere Größe als sizeof (short)?] (Https://stackoverflow.com/q/24610737/253056) –

Antwort

2

Die Anweisung

sizeof(c = a+b); 

misst nicht die Größe der variablen c aber die Größe des aus dem Ausdruck berechneten Wertes c = a+b. Es ist der Wert a+b, der c zugewiesen wird, aber es ist auch der Wert des gesamten Ausdrucks.

Die Integralwerte, deren Speichertyp kleiner als int in einem arithmetischen Ausdruck ist, werden für die Berechnung in int (oder unsigned int) umgewandelt. Der Speichertyp des Ergebnisses des arithmetischen Ausdrucks ist int. Dies hat keinen Einfluss darauf, dass Sie es in einer short int Variablen speichern. Daher der Wert, der von sizeof() zurückgegeben wird.

Das gleiche für sizeof(c*d).

Verwandte Themen