是否可以在不声明struct中的特定大小的情况下创建数组?

时间:2014-02-26 16:46:40

标签: c arrays pointers struct

尝试创建包含三个数组的struct。在读取输入之前,我不确定数组的大小。

如果我不确定它们在struct init中的大小,我如何在结构中初始化这些数组?我将从第一行输入中知道总量。

我将是使用输入中读入的大小。我应该把我变成一个庞大的数字吗?

struct TaskSet
{
    float priority[i];
    float p[i];
    float w[i];
    float d[i];
};

2 个答案:

答案 0 :(得分:5)

您可以使用大号或使用T *arr(连同大小):

struct TaskSet
{
    float *priority;
    int size_priority;
    ...
    float *d;
    int size_d;
};

P.S。:一旦从用户处读取,您需要使用malloc大小。

答案 1 :(得分:0)

结构在编译时需要是已知大小,以便编译器知道在内存中为每个结构提供多少空间。请考虑以下结构:

struct pair{
    int a;
    int b;
};

当您将结构体创建为函数变量时,编译器会在堆栈上为两个整数创建足够的空间。如果你创建一个包含五个结构的数组(见下文),编译器会在堆栈上为2 * 5 = 10个连续的int创建足够的空间:

struct pair p[5];

如果编译器不能提前知道结构的大小,则无法在堆栈上创建结构。

指针总是大小相同,所以我建议使用指针结构,就像在herohuyongtao的示例代码中一样。