Разница между sizeof (struct name_of_struct) и sizeof (name_of_struct)?
Каковы различия между:
sizeof(struct name_of_struct)
против
sizeof(name_of_struct)
Возвращаемые значения предмета одинаковы.
Есть ли разница между этими двумя? Даже если это тонко/не важно, я хотел бы знать.
Ответ 1
struct name_of_struct однозначно ссылается на тег struct/classname_of_struct тогда как name_of_struct может быть переменной или именем функции.
Например, в POSIX у вас есть и struct stat и функция с именем stat. Когда вы хотите сослаться на тип struct, вам необходимо ключевое слово struct для устранения неоднозначности (+ plain C требует этого всегда - в обычном C обычные идентификаторы живут в отдельном пространстве имен из тегов struct, а теги struct не проникают в обычные пространство имен идентификаторов, как в C++, если вы явно не перетаскиваете их туда с помощью typedef, как в typedef struct tag{/*...*/} tag;).
struct foo{ char x [256];};
void (*foo)(void);
int structsz(){ return sizeof(struct foo); } //returns 256
int ptrsz(){ return sizeof(foo); } //returns typically 8 or 4
Если это кажется сбивающим с толку, оно в основном существует для обеспечения обратной совместимости с C.
Ответ 2
Насколько я знаю: различие заключается в нотации структуры стиля c и нотации C++.
Ответ 3
И, конечно же,
sizeof name_of_struct
является допустимым выражением, только когда name_of_struct является объектом (а не просто типом); пишу
sizeof(struct name_of_struct)
не скомпилируется, если name_of_struct уже определено (завершенный тип) как структура (или класс). Но подождите, там больше! Если оба существуют, то
sizeof(struct name_of_struct)
вы получите размер типа, а не объекта, в то время как оба