Массивы с переменными границами в качестве членов структурС99 дает возможность в качестве последнего члена структуры указывать массив без размера. (В структуре перед гибким массивом-членом должен стоять как минимум еше один член.) Он называется членом-массивом с переменными границами. Таким образом, структура может иметь в качестве члена массив переменного размера. В размере такой структуры, возвращаемом sizeof, память для гибкого массива не учитывается. Обычно память для структуры с членом-массивом с переменными границами распределяется автоматически, с помощью malloc(). Кроме размера структуры, необходимо еше выделить дополнительную память, чтобы разместить член-массив с переменными границами нужного размера. Например, если имеется следующее определение структуры
sturct mystruct {
int a;
int b;
float fa[]; //массив с переменными границами
};
то при выполнении следующего кода будет выделяться место для массива из 10 элементов: struct mystruct *p; p = (struct mystruct *) malloc(sizof(struct mystuct) + 10 * sizof(float);) Так как sizeof (struct mystruct) дает значение, в котором не учтен размер памяти для fa, то при вызове malloc() с помощью выражения 10 *sizof(float) дополнительно выделяется место для размещения массива из 10 элементов типа float.
|
| |||||
|---|---|---|---|---|---|---|