#c #struct #sizeof
#c #структура #sizeof
Вопрос:
Когда вы определяете структуру, подобную приведенной ниже
typedef struct num {
int a;
int b;
} A;
Тогда sizeof(A)
допустимо, но sizeof(num)
не является. Может кто-нибудь, пожалуйста, объяснить причину, по которой оператор sizeof не принимает num
?
Комментарии:
1.
num
является тегом, а не типом. Sosizeof(num)
недопустимо, ноsizeof(struct num)
нормально.2. @unwind спасибо за комментарий! Я думал, что размер — это функция…
3. @unwind В этом случае
sizeof A
не будет работать. ПосколькуA
это тип,sizeof
нужны круглые скобки.4. @IanAbbott D’oh! Конечно, ошибка мозга. Я удалю. Спасибо.
Ответ №1:
Потому num
что само по себе не является типом в C (только struct num
или его typedef A
составляет тип). Итак, sizeof
сбой, поскольку его операнд не находится ни в одной из форм, для которых он определен:
sizeof unary-expression
sizeof ( type-name )
т. е. num
не является ни типом, ни унарным выражением.
Итак, sizeof(struct num)
или sizeof(A)
в порядке, но sizeof(num)
это не так.