我有一个结构说:
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的大小还是我还需要定义子结构的大小?如果是,那我该怎么办?
答案 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中的数据填充。您可以在下面阅读一些内容: