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 sizeofoperador 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 doublemientras que en esta llamada
printf("%zu",sizeof(c));
La variable ctiene 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.5no es un flotador, es undouble