0

x番号の配列'y'があります。その中の要素の数(番号「x」はユーザーによって指定されます)、配列「y」とまったく同じタイプの要素を持つ構造体の配列を作成する必要があります。つまり、構造体の配列には「x」要素があります。 。

4

3 に答える 3

0

私があなたを正しく理解しているなら、あなたはある種の「配列」を持っており、要素の数はユーザーによって決定されます。私はあなたmallocがこのようにそれを割り当てると推測しています:

type_of_y *y = malloc(x * sizeof(type_of_y));

次に、同じ数の要素を使用して、構造から同様の「配列」を作成します。なぜあなたはあなたがするのと同じようにそれをすることができないのですyか?すなわち:

struct my_structure *new_array = malloc(x * sizeof(struct my_structure));
于 2012-04-16T12:43:30.370 に答える
0

おそらくこのような構造が必要です。配列のタイプはArrayType;として表示されます。あなたは書くintdouble、またはあなたにふさわしい他のものを書くことができます。

typedef struct array
{
    size_t     num_elements;  // stores the 'x' value
    ArrayType *arr_elements;
} array;

次に、そのタイプの配列を割り当てることができます。

array *list = calloc(sizeof(array), number);
for (int i = 0; i < number; i++)
{
    list[i].arr_elements = malloc(sizeof(*list[i].arr_elements) * array_size);
    list[i].num_elements = array_size;
}

メモリ割り当てをエラーチェックする必要があります。

if (list == 0)
   ...error...

   if (list[i].arr_elements == 0)
   {
       ...release already allocated space...
       ...error...
   }

listof配列内の各配列(おそらく名前の最良の選択ではない)には、異なる数の要素が含まれている可能性があることに注意してください。そのnum_elements特定の配列の大きさを示します。

ここでは、C99フレキシブル配列メンバーは実際には役に立たないことに注意してください。柔軟な配列メンバーを含む構造体の配列を持つことはできませんが、それらへのポインターの配列を持つことはできます。

于 2012-04-16T12:44:49.527 に答える
0
/* new array */
MYSTRUCT *abc = (MYSTRUCT *)calloc(x, sizeof(MYSTRUCT));
/* copy contents of 'y' into new array */
for (int i = 0; i < x; i++)
    abc[i] = y[i];
于 2012-04-16T12:49:12.750 に答える