2013-07-19 11 views
7

diesen Code-Schnipsel Gegeben:sizeof Operator gibt 4 für (char + short)

#include <stdio.h> 

    int main() { 

     short i = 20; 
     char c = 97; 

     printf("%d, %d, %d\n", sizeof(i), sizeof(c), sizeof(c + i)); 

     return 0; 
    } 

Warum ist sizeof(c + i) == 4?

+9

Ganzzahlige Werbung? – nouney

+4

(c + i) wird zuerst hinzugefügt und die sizeof wird für die Resultierende berechnet .. und das Ergebnis ist eine ganze Zahl .. so ist die Größe 4 .. –

+4

Nitpick: 'sizeof' ist keine Funktion, es ist ein Operator. – milleniumbug

Antwort

17

c + i ist ein Integer-Ausdruck (integer Förderung!), So sizeof() kehrt sizeof(int)

3

Die C verwendet int für alle Integer-Berechnung, wenn nicht anders angegeben. Auf Ihrer Plattform ist int eindeutig 32bit lang, so dass sizeof4 zurückgibt. Wenn Ihr Compiler 64-Bit-Ganzzahlen verwenden würde, wäre es 8.

+0

ein bisschen offtopic, aber gibt es einen bekannten Compiler, der 64-Bit-Ints verwendet? – keltar

+0

Es ist mehr über die tatsächliche Architektur - zum Beispiel SPARC64 - ILP64/SILP64 –

4

Integer-Typen, die kleiner als int sind, werden heraufgestuft, wenn eine Operation ausgeführt wird. Wenn alle Werte des ursprünglichen Typs als int dargestellt werden können, wird der Wert des kleineren Typs in an int konvertiert; Andernfalls wird es in einen unsigned int konvertiert.

Integer-Werbeaktionen erfordern die Förderung jeder Variablen (c und i) zur int-Größe.

short i = 20; 
char c = 97; 
//The two int values are added and the sum is truncated to fit into the char type. 
char a = c + i; 
printf("%d, %d, %d %d\n", sizeof(i), sizeof(c), sizeof(c + i),sizeof(a)); 

2, 1, 4 1 
+0

Interessante Kapitel mit Ihnen teilen [Operator Conversions: Arithmetische Conversions] (http://csweb.cs.wfu.edu/~torgerse/Kokua/More_SGI/007- 0701-150/sgi_html/ch05.html) –

Verwandte Themen