#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;
}
A saída é:
8 4 4 4 4 1
Por que a saída é diferente para os mesmos valores?
6.5
não é um flutuador, é umdouble
printf("%d",sizeof(6.5f));
para fazer issofloat
.printf("%zu", sizeof(6.5));
Respostas:
Constantes de caracteres em C (opostos para C ++) tem o tipo
int
. Então esta ligaçãosaídas 4. Isso
sizeof( 'A' )
é igual asizeof( int )
.Do padrão C (6.4.4.4 Constantes de caracteres)
Por outro lado (6.5.3.4 O tamanho e o alinhamento dos operadores)
Portanto, o operando do
sizeof
operador nesta expressãosizeof( 'A' )
tem o tipo int enquanto nesta expressão emsizeof( a )
que a é declarado comoo operando tem o tipo
char
.Preste atenção a chamadas assim
use especificador de formato de conversão incorreto. Você tem que escrever
Também na chamada acima, é usada uma constante do tipo
double
enquanto nesta chamadaa variável
c
tem o tipofloat
.Você poderia obter o mesmo resultado para essas chamadas se a primeira chamada usasse uma constante do tipo float como
fonte
Constantes, como variáveis, têm um tipo próprio:
6.5
: Uma constante de ponto flutuante do tipodouble
90000
: Uma constante inteira do tipoint
(seint
for 32 bits) oulong
(seint
for 16 bits)'A'
: Uma constante de caractere do tipoint
em C echar
em C ++Os tamanhos impressos são os tamanhos dos tipos acima.
Além disso, o resultado do
sizeof
operador tem tiposize_t
. Portanto, ao imprimir o especificador de formato adequado a ser utilizado%zu
, não%d
.fonte
Porque os valores não importam
sizeof
. É o tamanho dos tipos.constantes de caracteres são
int
s, nãochar
s.constantes de ponto flutuante são por padrão
double
s, a menos que você as sufixe comf
oul
.fonte