type float datatype bytes c size char int sizeof

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. Para char , 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 como int , 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.