Есть несколько вещей, к которым это может относиться. Единственное место, где я видел, что точная формулировка часто использовалась, это C99.
Член гибкого массива - это официальное имя C99, которое обычно (обычно) называлось "структурным хаком". Основная идея заключается в том, что вы определяете структуру примерно так:
struct x {
int a; // whatever members you want here.
size_t size;
int x[]; // no size, last member only
};
Это используется в основном (или исключительно) с динамическим распределением. Когда вы хотите выделить объект этого типа, вы выделяете достаточно дополнительного пространства для любого необходимого размера массива:
struct x *a = malloc(sizeof(struct x) + 20 * sizeof(int));
a->size = 20;
Элемент size
не является строго необходимым, но часто удобен для отслеживания размера, выделенного для элемента. В приведенном выше есть место для 20 int, но суть в том, что у вас может быть несколько вокруг, каждый со своим размером.