显然,具有灵活数组成员的结构不打算被声明,而是与指向该结构的指针一起使用。声明一个灵活数组成员时,必须至少有一个其他成员,并且该灵活数组成员必须是该结构中的最后一个成员。
假设我有一个看起来像这样的:
struct example{
int n;
int flm[];
}
然后要使用它,我必须声明一个指针并使用 malloc 为结构的内容保留内存。
struct example *ptr = malloc(sizeof(struct example) + 5*sizeof(int));
也就是说,如果我希望我的 flm[] 数组保存五个整数。然后,我可以像这样使用我的结构:
ptr->flm[0] = 1;
我的问题是,我不应该只使用指针而不是这个吗?它不仅兼容 C99 之前的版本,而且我可以在有或没有指向该结构的指针的情况下使用它。考虑到我已经必须在 flm 中使用 malloc,难道我不应该这样做吗?
考虑一下示例结构的这个新定义;
struct example{
int n;
int *notflm;
}
struct example test = {4, malloc(sizeof(int) * 5)};
我什至可以像灵活数组成员一样使用替换:
这也行吗?(用notflm提供了上面例子的定义)
struct example test;
test.n = 4;
notflm = malloc(sizeof(int) * 5);