声明数组在c中包含一个结构

时间:2016-03-18 10:39:57

标签: c data-structures struct

您好我想声明一个大小为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的大小(包括数组); ?

2 个答案:

答案 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。