Символьные константы в C (противоположные C ++) имеют тип int. Итак, этот вызов
printf("%d",sizeof('A'));
Выходы 4. То sizeof( 'A' )есть равно sizeof( int ).
Из стандарта C (6.4.4.4 Символьные константы)
10 Целочисленная символьная константа имеет тип int ....
С другой стороны (6.5.3.4 Операторы sizeof и alignof)
4 Когда sizeof применяется к операнду с типом char, unsigned char или char со знаком (или его соответствующей версией), результатом будет 1.
Таким образом, операнд sizeofоператора в этом выражении sizeof( 'A' )имеет тип int, а в этом выраженииsizeof( a ) a объявлен как
char a = 'A';
операнд имеет тип char.
Обратите внимание, что звонки, как это
printf("%d",sizeof(6.5));
использовать неверный спецификатор формата преобразования. Вы должны написать
printf("%zu",sizeof(6.5));
Также в приведенном выше вызове используется константа типа, в doubleто время как в этом вызове
printf("%zu",sizeof(c));
переменная c имеет тип float.
Вы можете получить тот же результат для этих вызовов, если в первом вызове используется константа типа float, например
printf("%zu",sizeof(6.5f));
6.5это не поплавок, этоdouble