在一个结构中是否可以有两个灵活大小的数组?
我知道我可以做下面的事情
struct A {
int countB;
struct B[0];
}
但我的问题是我们可以做下面的事吗?
struct A {
int countB;
struct B[0];
int countC;
struct C[0];
}
如果是,我们如何获得countC的偏移?
如果上述内容很难实施,还有其他方法可以解决这类问题吗?
答案 0 :(得分:3)
不,每个数据结构不允许多个灵活大小的数组:
6.7.2.1.16:作为一种特殊情况,具有多个命名成员的结构的最后一个元素可能具有不完整的数组类型;这被称为灵活的阵列成员。
灵活数组成员必须是最后一个成员的原因是否则无法计算任何成员的偏移量(相对于struct
的初始成员的地址的字节数)遵循灵活的阵列成员。
在您的情况下,可以进行变通,但需要在灵活成员之前存储额外的指针,并指向C
内B
的位置:
struct A {
int countB;
int countC;
struct some_struct *C;
struct some_struct B[0];
};
分配struct A
时,您需要分配额外的countB+countC
大小。会员C
需要设置为B+countB
的地址。