Символьні константи в С (протилежно С ++) мають тип int. Тож цей дзвінок
printf("%d",sizeof('A'));
Виходи 4. Тобто sizeof( 'A' )дорівнює sizeof( int ).
Зі стандарту С (6.4.4.4 символьні константи)
10 Ціла константа символів має тип int ....
З іншого боку (6.5.3.4 Розмір операторів розміру та алігноф)
4 Коли sizeof застосовується до операнду, який має тип char, неподписаний char або підписаний char (або його кваліфіковану версію), результат дорівнює 1.
Отже, операнд sizeofоператора в цьому виразі sizeof( 'A' )має тип int, а в цьому виразі sizeof( 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