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