6

制作一个结构并给它三个这样的成员,

 struct student{
                 int rollno;
                 char name[10];
                 int arr[];
                }stud1, stud2;

现在给 stud1 4 条记录,给 stud2 5 条记录。我告诉面试官我们必须给数组一些大小,否则它不会被分配任何空间,否则会导致编译器错误。他说根据 C 的新标准,这是可能的。最后我不明白该怎么做。有人有建议吗?我试图做一个 realloc 但我不确定自己是否会工作。

4

2 回答 2

8

示例本身是错误的,因为无法声明自动对象(stud1 和 stud2)。但是你可以写

struct student *s = malloc(sizeof *s + number_of_arr_elems * sizeof s->arr[0]);
于 2013-10-26T16:54:37.810 回答
3

它是一个灵活的数组成员。此功能已在 C99 中添加。它允许结构类型的最后一个成员具有不完整的数组类型。此功能在 C99 标准的 6.7.2.1 中进行了说明。

“作为一种特殊情况,具有多个命名成员的结构的最后一个元素可能具有不完整的数组类型;这称为灵活数组成员。[...]”

该段的其余部分描述了它的用法。

于 2013-10-26T16:53:29.533 回答