Если b
не может быть постоянным, и вы не хотите использовать выделения кучи для массива ребенка, вы можете использовать это, довольно своеобразно обходной путь (подсказка: рассмотреть не использовать это, но, используя распределение кучи для массив):
typedef struct depth *depth_p;
struct depth
{
int number;
depth_p child[0];
};
уловка, что следующее заявление остается в силе:
depth_p d = get_depth();
d->child[5]; // <-- this is still valid
для того, чтобы использовать это, необходимо создать экземпляры depth_p
в этом (и о олько это) способ:
depth_p create_depth(int num_children)
{
return (depth_p)malloc(
sizeof(struct depth) + num_children * sizeof(depth_p)
);
}
Во-первых, это выделяет память для всех других членов (int number
) с sizeof(struct depth)
. Затем он выделяет дополнительных памяти на нужное количество детей по с добавлениемnum_children * sizeof(depth_p)
.
Не забудьте бесплатно получить depth
ссылки с free
.
Вы не можете иметь размер переменной массива. – lurker
Вы не можете использовать переменную в объявлении массива. попробуйте использовать указатель и malloc позже. –