Las constantes de caracteres en C (opuesto a C ++) tienen el tipo int
. Entonces esta llamada
printf("%d",sizeof('A'));
salidas 4. Eso sizeof( 'A' )
es igual a sizeof( int )
.
Del estándar C (6.4.4.4 Constantes de caracteres)
10 Una constante de carácter entero tiene el tipo int ....
Por otro lado (6.5.3.4 Los operadores sizeof y alignof)
4 Cuando sizeof se aplica a un operando que tiene el tipo char, unsigned char oigned char, (o una versión calificada del mismo) el resultado es 1.
Entonces, el operando del sizeof
operador en esta expresión sizeof( 'A' )
tiene el tipo int, mientras que en esta expresión sizeof( a )
donde a se declara como
char a = 'A';
El operando tiene el tipo char
.
Presta atención a esas llamadas como esta
printf("%d",sizeof(6.5));
utiliza un especificador de formato de conversión incorrecto. Tu tienes que escribir
printf("%zu",sizeof(6.5));
También en la llamada anterior se usa una constante del tipo double
mientras que en esta llamada
printf("%zu",sizeof(c));
La variable c
tiene el tipo float
.
Podría obtener el mismo resultado para estas llamadas si la primera llamada usara una constante del tipo float como
printf("%zu",sizeof(6.5f));
6.5
no es un flotador, es undouble