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,
sizeofdevuelve el tamaño del tipo de datos. Parachar, obtienes 1. - Para una expresión,
sizeofdevuelve 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.