#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.5
no es un flotador, es undouble
printf("%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
sizeof
operador 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
double
mientras que en esta llamadaLa variable
c
tiene 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 flotantedouble
90000
: Una constante de tipo enteroint
(siint
es de 32 bits) olong
(siint
es de 16 bits)'A'
: Una constante de caracteres de tipoint
en C ychar
en C ++Los tamaños que se imprimen son los tamaños de los tipos anteriores.
Además, el resultado del
sizeof
operador 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
int
s, nochar
s.las constantes de punto flotante son por defecto
double
s a menos que las sufijas conf
ol
.fuente