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í?
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í?
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.
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 –
¿Por qué es '3' un entero? – Mohit
En C, los literales char son de tipo int. No es así con C++. –
sizeof() de salida depende del compilador que está utilizando
Algunos puntos a tener en cuenta:
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.int
char[2]
, el carácter 3 a continuación, el terminador nulo.int
Con estas las diferencias son fácilmente explicada:
int
requiere 4 char
s de espacio para sostenerlochar[2]
naturalmente sólo requiere 2 char
s+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
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.
verificar para sizeof (int) y sizeof (char) y sizeof (char *) – Vijay
'sizeof' no es una función sino un operador. –
@benjamin botón: orden diferente coincidiría con la pregunta de OP :) – akira