如何使用可以为每个结构设置不同的数组构建一个结构,理想情况下是通过参数?应用程序是单个数据类型,支持不同但固定长度的数组
我的尝试看起来像这样,显然没有编译:
struct Data_struct(n)
{
int xData[n];
int test;
};
答案 0 :(得分:3)
唯一可用的方法是使用flexible array member。
struct Data_struct {
int test;
int xData[];
};
然后,您将使用malloc()
:
int n = 4;
struct Data_struct *s = malloc(sizeof(struct Data_struct) + n * sizeof(int));
请注意,我们必须为灵活数组显式分配额外空间。
答案 1 :(得分:2)
您可以动态分配数组
struct Data_struct
{
int * xData;
int test;
};
....
s.xData = calloc(size, sizeof(int))
并记得在完成后释放xData
答案 2 :(得分:1)
通常你会在结构的末尾定义一个可变长度数组,然后在运行时修改大小,例如
typedef struct
{
int test;
int xData[1];
} Data_struct;
要为n
分配一个大小为xData
的结构,你可以像这样做:
Data_struct * s = malloc(sizeof(Data_struct) + (n - 1) * sizeof(int));
答案 3 :(得分:0)
有人可能会称之为丑陋但这里也是如此。使用#define
#define foo(n) struct Data_struct##n { int test; int xData[n]; }
foo(20);
struct Data_struct20 abc;
foo(20)定义了一个n = 20个字符的结构。 如果您愿意,可以使用另一个#define来分配空间。