首页 > 解决方案 > sizeof(struct name_of_struct) 与 sizeof(name_of_struct) 的区别?

问题描述

有什么区别:

sizeof(struct name_of_struct)

对比

sizeof(name_of_struct)

主题的返回值是相同的。

两者有什么区别吗?即使它很微妙/不重要,我也想知道。

标签: c++

解决方案


struct name_of_struct明确地指代struct/class标记name_of_struct,而name_of_struct可能是变量或函数名称。

例如,在 POSIX 中,您同时拥有struct stat和 一个名为 的函数stat。当您想引用结构类型时,您需要struct关键字来消除歧义(+ 纯 C 始终需要它 - 在纯 C 中,常规标识符位于与结构标签不同的命名空间中,并且结构标签不会泄漏到常规标识符中命名空间就像它们在 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 的向后兼容性。


推荐阅读