在编译时确定数组大小的C结构

时间:2016-03-04 16:28:05

标签: c struct

如何使用可以为每个结构设置不同的数组构建一个结构,理想情况下是通过参数?应用程序是单个数据类型,支持不同但固定长度的数组

我的尝试看起来像这样,显然没有编译:

struct Data_struct(n)
{
    int xData[n];
    int test;
};

4 个答案:

答案 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来分配空间。