#include <stdio.h>
int main() {
char a = 'A';
int b = 90000;
float c = 6.5;
printf("%d ",sizeof(6.5));
printf("%d ",sizeof(90000));
printf("%d ",sizeof('A'));
printf("%d ",sizeof(c));
printf("%d ",sizeof(b));
printf("%d",sizeof(a));
return 0;
}
El resultado es:
8 4 4 4 4 1
¿Por qué la salida es diferente para los mismos valores?

6.5no es un flotador, es undoubleprintf("%d",sizeof(6.5f));para hacerlo afloat.printf("%zu", sizeof(6.5));Respuestas:
Las constantes de caracteres en C (opuesto a C ++) tienen el tipo
int. Entonces esta llamadasalidas 4. Eso
sizeof( 'A' )es igual asizeof( int ).Del estándar C (6.4.4.4 Constantes de caracteres)
Por otro lado (6.5.3.4 Los operadores sizeof y alignof)
Entonces, el operando del
sizeofoperador en esta expresiónsizeof( 'A' )tiene el tipo int, mientras que en esta expresiónsizeof( a )donde a se declara comoEl operando tiene el tipo
char.Presta atención a esas llamadas como esta
utiliza un especificador de formato de conversión incorrecto. Tu tienes que escribir
También en la llamada anterior se usa una constante del tipo
doublemientras que en esta llamadaLa variable
ctiene el tipofloat.Podría obtener el mismo resultado para estas llamadas si la primera llamada usara una constante del tipo float como
fuente
Las constantes, como las variables, tienen un tipo propio:
6.5: Una constante de tipo flotantedouble90000: Una constante de tipo enteroint(siintes de 32 bits) olong(siintes de 16 bits)'A': Una constante de caracteres de tipointen C ycharen C ++Los tamaños que se imprimen son los tamaños de los tipos anteriores.
Además, el resultado del
sizeofoperador tiene tiposize_t. Entonces, al imprimir el especificador de formato adecuado para usar%zu, no lo es%d.fuente
Porque los valores no importan
sizeof. Es el tamaño de los tipos.las constantes de caracteres son
ints, nochars.las constantes de punto flotante son por defecto
doubles a menos que las sufijas confol.fuente