Constantes de caracteres em C (opostos para C ++) tem o tipo int
. Então esta ligação
printf("%d",sizeof('A'));
saídas 4. Isso sizeof( 'A' )
é igual a sizeof( int )
.
Do padrão C (6.4.4.4 Constantes de caracteres)
10 Uma constante de caractere inteiro tem o tipo int ....
Por outro lado (6.5.3.4 O tamanho e o alinhamento dos operadores)
4 Quando sizeof é aplicado a um operando que possui o tipo char, char não assinado ou char assinado (ou uma versão qualificada), o resultado é 1.
Portanto, o operando do sizeof
operador nesta expressão sizeof( 'A' )
tem o tipo int enquanto nesta expressão em sizeof( a )
que a é declarado como
char a = 'A';
o operando tem o tipo char
.
Preste atenção a chamadas assim
printf("%d",sizeof(6.5));
use especificador de formato de conversão incorreto. Você tem que escrever
printf("%zu",sizeof(6.5));
Também na chamada acima, é usada uma constante do tipo double
enquanto nesta chamada
printf("%zu",sizeof(c));
a variável c
tem o tipo float
.
Você poderia obter o mesmo resultado para essas chamadas se a primeira chamada usasse uma constante do tipo float como
printf("%zu",sizeof(6.5f));
6.5
não é um flutuador, é umdouble