2010-07-26 23 views
5

consideri il programmaoperatore sizeof() in C

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

uscita da un compilatore gcc è:

4 2 4 

Perché è così?

+6

controllare per sizeof (int) e sizeof (char) e sizeof (char *) – Vijay

+8

'sizeof' non è una funzione ma un operatore. –

+0

tasto @benjamin: l'ordine diverso corrisponde alla domanda dell'OP :) – akira

risposta

13

si Supponendo che sono in esecuzione su un sistema a 32 bit:

sizeof un carattere letterale '3' è 4 perché letterali di carattere sono interi in linguaggio C (ma non C++).

sizeof "3" è 2 perché è un array letterale con lunghezza 2 (numero 3 più terminatore NULL).

sizeof letteral 3 è 4 perché è un int.

+2

Le risposte a questa domanda aiutano a spiegarne altre - http://stackoverflow.com/questions/2252033/in-c-why-is-sizeofchar-1-when-a-is-an-int –

+1

Perché '3' un intero? – Mohit

+1

In C, i valori letterali di char sono di tipo int. Non così con C++. –

0

sizeof() La produttività dipende compilatore si utilizza

12

Alcuni punti da tenere a mente:

  1. sizeof non è una funzione, è un operatore. Restituisce la dimensione di un tipo in unità di sizeof char. In altre parole sizeof char è sempre 1.
  2. '3' è un int
  3. "3" è una char[2], il carattere 3 poi il terminatore nullo.
  4. 3 è una int

Con queste differenze sono facilmente spiegabili:

  1. un int richiede 4 char s di spazio per tenerlo
  2. char[2] naturalmente richiede solo 2 char s
+1

+1 per aver menzionato 'sizeof' è un operatore. Pet peeve mine: le parentesi in 'sizeof (char)' appartengono al tipo (dove sono necessarie). Possono (e dovrebbero) essere omessi in 'sizeof '3''. – schot

3

Per quotare K & R,

Ogni compilatore è libero di scegliere dimensione appropriata per il proprio hardware, soggetto soltanto alla il restrizione che pantaloncini e int sono almeno 16 bit, long sono almeno 32 bit, e breve non è più di int, che non è più lungo.