是否可以在c中定义尺寸变化结构?

时间:2017-05-28 00:23:48

标签: c gcc struct

如果您要声明如下内容:

struct MyStruct
{
   int field1;
   int[] field2;
   int field3;
}

字段2实际上是指向数组的指针,而不是数组本身。所以MyStruct保留3个字节的大小。我想知道是否有办法做类似的事情,除了field2应该是数组本身而不是指针。

显然你可以用一个数组来做到这一点,但我的最终目标是能够在上述结构中拥有不同类型的不同大小;这需要填充(我不想要)。

这有可能吗?

1 个答案:

答案 0 :(得分:1)

工会至少与工会中最大的项目一样大,不小。如果您当前正在使用其中一个较小的项,则它不会缩小union的大小或它所属的外部struct。但是,联合之前和之后的项目在用于联合的内存之前和之后仍然是安全的并且物理存在,即使它们当前使用的内存不完全接触。 This question显示了一个如何创建这种联合的示例。

为了响应更新,如果外部结构必须是相同的大小而不管联合,那么你可能希望做的最好的是指向联合内容而不是联合本身。工会仍然不是最低限度的"虽然大小。否则,就像dbush建议并且有三个外部结构一样,根本不使用union。