您好我想声明一个大小为x的数组,这个大小将在运行时知道(不是静态声明)。怎么做。一种有效的方法。
我有这样的结构
#define SIZE 50
struct abc {
int students[SIZE];
int age;
}
我想在运行时从某个点读取SIZE,而不是预先定义它。
编辑:我们可以动态地为包括数组在内的整个结构分配内存。
strcut abc {
int *students; // should point to array of SIZE.
int age;
}s;
我们可以得到sizeof struct =整个struct的大小(包括数组); ?
答案 0 :(得分:5)
如果在运行时已知大小,则需要使用动态分配。
struct abc
{
int *students;
int age;
}
然后在代码中,
struct abc var;
var.students = malloc(size*sizeof(int));
并在代码末尾
free(var.students);
答案 1 :(得分:1)
有两种可能更简单的解决方案。您可以在struct
:
struct abc {
int age;
int students[];
};
unsigned count = 10;
struct abc* foo = malloc(sizeof(*foo) + (count * sizeof(foo->students[0])));
如果您需要动态分配malloc()
和struct
,则只需要一次array
来电。而且也只有一个免费。对于2d数组,您必须将其分配为1d数组并计算您自己的索引。
另一种解决方案可能是:
unsigned count = 10;
struct abcd {
int age;
int students[count];
};
在struct
direct中简单使用可变长度数组。在这里你可以照常使用2d。