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 sizeofoperador 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 doubleenquanto nesta chamada
printf("%zu",sizeof(c));
a variável ctem 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.5não é um flutuador, é umdouble