float - En C, ¿por qué sizeof(char) 1, cuando ''a'' es un int?
size of char (5)
De acuerdo con los estándares de ANSI C, un char
es promovido a un int
en el contexto donde se usan enteros, usted utilizó un especificador de formato entero en el printf
por lo tanto, los diferentes valores. Una char suele ser de 1 byte, pero esa es una implementación definida en función del tiempo de ejecución y el compilador.
Lo intenté
printf("%d, %d/n", sizeof(char), sizeof(''c''));
y obtuve 1, 4 como salida. Si el tamaño de un personaje es uno, ¿por qué ''c''
me da 4? Supongo que es porque es un número entero. Entonces cuando hago char ch = ''c'';
¿Hay una conversión implícita ocurriendo, bajo el capó, de ese valor de 4 bytes a un valor de 1 byte cuando se asigna a la variable char?
El estándar Th C dice que un carácter literal como ''a'' es de tipo int, no escriba char. Por lo tanto, tiene (en su plataforma) tamaño de == 4. Vea esta pregunta para una discusión más completa.
En C ''a'' es una constante entera (!?!), Entonces 4 es correcto para su arquitectura. Se convierte implícitamente en char para la asignación. sizeof (char) es siempre 1 por definición. El estándar no dice qué unidades es 1, pero a menudo es bytes.
Es el comportamiento normal del operador sizeof
(Ver Wikipedia ):
- Para un tipo de datos,
sizeof
devuelve el tamaño del tipo de datos. Parachar
, obtienes 1. - Para una expresión,
sizeof
devuelve el tamaño del tipo de la variable o expresión. Como un literal de carácter se escribe comoint
, obtienes 4.
Esto está cubierto en ISO C11 6.4.4.4 Character constants
aunque en gran medida no ha cambiado desde estándares anteriores. Eso dice, en el párrafo /10
:
Una constante de caracteres enteros tiene tipo int. El valor de una constante de caracteres enteros que contiene un solo carácter que se asigna a un carácter de ejecución de un solo byte es el valor numérico de la representación del carácter correlacionado interpretado como un entero.