Каковы различия между:
sizeof(struct name_of_struct)
против
sizeof(name_of_struct)
Возвращаемые значения предмета одинаковы.
Есть ли разница между этими двумя? Даже если это тонко/не важно, я хотел бы знать.
Каковы различия между:
sizeof(struct name_of_struct)
против
sizeof(name_of_struct)
Возвращаемые значения предмета одинаковы.
Есть ли разница между этими двумя? Даже если это тонко/не важно, я хотел бы знать.
struct name_of_struct
однозначно ссылается на тег struct
/class
name_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.
Насколько я знаю: различие заключается в нотации структуры стиля c и нотации C++.
И, конечно же,
sizeof name_of_struct
является допустимым выражением, только когда name_of_struct является объектом (а не просто типом); пишу
sizeof(struct name_of_struct)
не скомпилируется, если name_of_struct уже определено (завершенный тип) как структура (или класс). Но подождите, там больше! Если оба существуют, то
sizeof(struct name_of_struct)
вы получите размер типа, а не объекта, в то время как оба
sizeof(name_of_struct)
а также
(sizeof name_of_struct)
Вы получите размер объекта.