[英]calculate size of structure that has structure with in it
我有一个结构说:
struct sub_struct
{
short int alpha; //2 bytes
short int beta;
short int gamma;
}
struct big_struct
{
char movie;
char songs;
short int release;
sub_struct temp_struct[ 4 ];
}
我必须在代码中的某处检查sizeof结构,以便在标头中定义如下内容:
const int LEN_BIG_STRUCT = sizeof( big_struct );
现在我的问题是LEN_BIG_STRUCT
还会包含LEN_BIG_STRUCT
的大小,还是我也需要定义sub struct的大小? 如果是,那我该怎么办?
想象big_struct
作为一个篮子,您在其中放入了一个较小的篮子sub_struct
。
如果您现在要把盛有小篮子的大篮子放在磅秤上; 如果重量不包括小篮子的重量,您会感到有些惊讶,不是吗?
sizeof
符合预期是一件好事。
是的, sizeof
得出参与其操作数的对象表示形式的字节总数; 包括任何潜在的填充。
这是C ++标准关于sizeof
:
当应用于一个类时,结果是该类的对象中的字节数,包括将该类型的对象放置在数组中所需的任何填充。
注意 :运算符在C中的工作方式相同。
sizeof(x)
返回变量或类型x
的字节总数。
在您的情况下:
small_struct
:总共6个字节(每个short int
2个字节)。 big_struct
:2个char
和1个short
,以及一个small_struct
数组,总计24个字节(4个元素* 6个字节)。 因此sizeof(big_struct)
返回的字节总数为28
。
要回答您的问题,您不需要定义small_struct
的大小,因为sizeof()
会添加结构中包含的所有字节,如FilipRoséen在其答案中所述。
注意: 如下所述, big_struct
28
个字节并非在所有系统上都通用。 这是由于C中的数据填充所致。您可以在下面阅读有关它的内容:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.