FAQ C отвечает именно на этот вопрос.Быстрый ответ состоит в том, что эта структура будет включать массив double
внутри структуры, а не указатель на массив вне структуры.В качестве быстрого примера вы можете использовать свою структуру, как в этом примере:
struct s mystruct = malloc(sizeof(struct s) + 5 * sizeof(double));
s.n = 12;
s.d[0] = 4.0;
s.d[1] = 5.0;
s.d[2] = 6.0;
s.d[3] = 7.0;
s.d[4] = 8.0;
И так далее - размер массива, который вам нужен, включен в выделение, и затем вы можете использовать его так же,любой массив.Обычно такой тип содержит размер как часть структуры, поскольку использование трюка +
для пропуска массива типа s
будет обязательно осложнено этой ситуацией.
К добавленному вами вопросу 'какэта конструкция более или менее мощная, чем сохранение [указателя] в качестве 2-го элемента? ', она не более мощная сама по себе, но вам не нужно держать указатель вокруг, поэтому вы должны сохранитьпо крайней мере, так много места - также, когда вы копируете структуру, вы также копируете массив, а не указатель на массив - иногда небольшая разница, но очень важная в других случаях.«Вы можете сделать это несколькими способами», вероятно, является хорошим объяснением, но есть случаи, когда вам определенно нужен один или другой дизайн.