2010-07-26 19 views
5

considerar el programaoperador sizeof() en C

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

salida de un compilador gcc es:

4 2 4 

¿Por qué es así?

+6

verificar para sizeof (int) y sizeof (char) y sizeof (char *) – Vijay

+8

'sizeof' no es una función sino un operador. –

+0

@benjamin botón: orden diferente coincidiría con la pregunta de OP :) – akira

Respuesta

13

Suponiendo que se ejecutan en un sistema de 32 bits:

sizeof un carácter literal '3' 4 es porque son caracteres literales enteros en lenguaje C (pero no en C++).

sizeof "3" es 2 porque es una matriz literal con longitud 2 (numeral 3 más terminador NULL).

sizeof literal 3 es 4 porque es un int.

+2

Las respuestas a esta pregunta ayudan a explicar algunas más - http://stackoverflow.com/questions/2252033/in-c-why-is-sizeofchar-1-when-a-is-an-int –

+1

¿Por qué es '3' un entero? – Mohit

+1

En C, los literales char son de tipo int. No es así con C++. –

0

sizeof() de salida depende del compilador que está utilizando

12

Algunos puntos a tener en cuenta:

  1. sizeof no es una función, que es un operador. Devuelve el tamaño de un tipo en unidades de sizeof char. En otras palabras sizeof char es siempre 1.
  2. '3' es un int
  3. "3" es una char[2], el carácter 3 a continuación, el terminador nulo.
  4. 3 es una int

Con estas las diferencias son fácilmente explicada:

  1. un int requiere 4 char s de espacio para sostenerlo
  2. char[2] naturalmente sólo requiere 2 char s
+1

+1 por mencionar 'sizeof' es un operador. Lo que más me molesta: las llaves en 'sizeof (char)' pertenecen al tipo (donde se necesitan). Pueden (y deben) omitirse en 'sizeof '3''. – schot

3

Para cotizar K & R,

Cada compilador es libre de elegir tamaños adecuados para su propio hardware , con sujeción únicamente a la restricción que pantalones cortos y enteros son al menos 16 bits, anhela son al menos 32 bits y corto no es más largo que int, que no es más largo que largo.