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

时间:2014-06-04 17:53:11

标签: c++ c structure

我有一个结构说:

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 );

现在我的问题是Will LEN_BIG_STRUCT还包括sub_struct的大小还是我还需要定义子结构的大小?如果是,那我该怎么办?

2 个答案:

答案 0 :(得分:2)

想象一下big_struct作为一个篮子,你把一个较小的篮子sub_struct放在里面。

如果你现在要把一个装有小篮子的大篮子放在一个刻度上;如果体重不包括那个小篮子,你会有点意外,不是吗?

sizeof做出了预期的好事。


换句话说......

是的,sizeof产生参与其操作数的对象表示的总字节数;包括任何潜在的填充。


以下是C ++标准对sizeof所说的内容:

  

当应用于类时,结果是该类的对象中的字节数,包括在数组中放置该类型的对象所需的任何填充。

注意:运算符在C中以相同的方式工作。


答案 1 :(得分:1)

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在其答案中所述。


注意: 如下所述,28的{​​{1}}字节在所有系统上都不是通用的。这是由于C中的数据填充。您可以在下面阅读一些内容: