gpt4 book ai didi

c - 带有 struct hack 的结构数组

转载 作者:太空宇宙 更新时间:2023-11-04 00:40:00 25 4
gpt4 key购买 nike

假设我在 C 中有这样的结构

struct A {  
int len;
char s[1];
}

我想要一个上述结构的数组,但是结构 A 的 char s[1] 成员可以是可变长度的。我们应该怎么做?即使是 C99 中的 struct hack trick 在这里似乎也不起作用。一种解决方案是将 char * 作为最后一个成员并进行动态内存分配,但我希望 struct 的所有数据都位于连续的位置,因为我的实现需要缓存健忘的。

最佳答案

您不能拥有可变大小对象的数组,因此您不能使用 struct hack 拥有结构数组。数组中的所有对象必须具有相同的大小。如果它们的大小都相同,则结构必须隐含大小,因此您毕竟不会使用 struct hack;在您的结构中数组 s 的维度中将有一个不是 1 的大小(除非 1 对所有内容都足够大)。原因是 a[i] 的存储位置(其中 a 是数组的名称,i 是数组的索引) 必须可计算为“a 的字节地址加上(i 数组中一个对象的大小的倍数)”。因此数组中对象(在本例中为结构)的大小必须已知且固定。

作为替代方案,您可以拥有一个指向可变大小对象的指针数组;您只需安排以适当的大小分别分配每个对象,并将指向该对象的指针保存在数组中。

请注意,C99 取消了“struct hack”(它从未被官方移植过,但在实践中它是)并引入了“灵活的数组成员”:

struct A {  
int len;
char data[];
};

但是,上述建议仍然适用。

关于c - 带有 struct hack 的结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12890579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com