尝试创建包含三个数组的struct
。在读取输入之前,我不确定数组的大小。
如果我不确定它们在struct
init中的大小,我如何在结构中初始化这些数组?我将从第一行输入中知道总量。
我将是使用输入中读入的大小。我应该把我变成一个庞大的数字吗?
struct TaskSet
{
float priority[i];
float p[i];
float w[i];
float d[i];
};
答案 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的示例代码中一样。