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

问题描述 投票:1回答:1

如果你要声明如下:

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

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

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

这有可能吗?

c gcc struct
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.