Символьные константы в 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