Символьні константи в С (протилежно С ++) мають тип 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