2010-07-26 12 views
5

Betrachten Sie das ProgrammOperator sizeof() in C

main() 
{ 
printf("%d %d %d",sizeof('3'),sizeof("3"),sizeof(3)); 
} 

Ausgabe von einem gcc-Compiler ist:

4 2 4 

Warum ist es so?

+6

Überprüfen Sie, ob sizeof (int) und sizeof (char) und sizeof (char *) – Vijay

+8

'sizeof' ist keine Funktion, sondern ein Operator. –

+0

@benjamin button: andere Reihenfolge würde OP-Frage :) – akira

Antwort

13

Sie Unter der Annahme ausgeführt wird auf einem 32-Bit-System:

sizeof einen Zeichenliteral '3' 4 ist, weil Zeichenliterale ints in der Sprache C ist (aber nicht C++).

sizeof "3" ist 2, weil es ein Array-Literal mit der Länge 2 ist (Zahl 3 plus NULL-Terminator).

sizeof literal 3 ist 4, weil es ein int ist.

+2

Die Antworten auf diese Frage helfen, einige mehr zu erklären - http://stackoverflow.com/questions/2252033/in-c-why-is-sizeofchar-1-when-a-is-anint –

+1

Warum ist "3" ein Integer? – Mohit

+1

In C sind Zeichenliterale vom Typ int. Nicht so mit C++. –

0

sizeof() Ausgabe ist abhängig von Compiler Sie verwenden

12

einige Punkte im Auge zu behalten:

  1. sizeof keine Funktion ist, ist es ein Operator ist. Es gibt die Größe eines Typs in Einheiten von sizeof char zurück. Mit anderen Worten sizeof char ist immer 1.
  2. ‚3‘ ist ein int
  3. „3“ ist ein char[2], das Zeichen 3 dann das Nullabschluss.
  4. 3 ist ein int

Mit diesen Unterschieden sind leicht erklärt:

  1. ein int benötigt 4 char s Platz, es zu halten
  2. char[2] natürlich erfordert nur 2 char s
+1

+1 für die Erwähnung von 'sizeof' ist ein Operator. Pet pisse von mir: Die Klammern in 'sizeof (char)' gehören zu dem Typ (wo sie gebraucht werden). Sie können (und sollten) in 'sizeof '3'' weggelassen werden. – schot

3

Um K 01 zu zitierenR,

Jeder Compiler frei ist geeignete Größen für die eigene Hardware, unterliegt lediglich der der Einschränkung zu wählen, die Kurzschlüsse und ints sind mindestens 16 Bit, longs mindestens 32 Bits, und kurz ist nicht mehr als Int, die nicht länger als lang ist.