繁体   English   中英

计算其中具有结构的结构的大小

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM