做一个结构,给它三个成员,就像这样,
struct student{
int rollno;
char name[10];
int arr[];
}stud1, stud2;
现在给 STUD1 4 条标记记录,给 STUD2 5 条标记记录。我告诉面试官,我们必须给数组一些大小,否则它不会被分配任何空间,否则会给出编译器错误。他说,根据C的新标准,这是可能的。最后我不明白该怎么做。有人有建议吗?我试图做一个 realloc,但我不确定它是否有效。
示例本身是错误的,因为无法声明自动对象(stud1 和 stud2)。但是你可以写
struct student *s = malloc(sizeof *s + number_of_arr_elems * sizeof s->arr[0]);
它是一个灵活的数组成员。此功能已在 C99 中添加。它允许结构类型的最后一个成员具有不完整的数组类型。此功能在 C99 标准的 6.7.2.1 中进行了说明。
"作为特例,具有多个命名成员的结构的最后一个元素可能具有不完整的数组类型;这称为灵活数组成员。[...]"
该段的其余部分描述了它的用法。