用于在C中构造变量的动态名称

时间:2012-04-16 12:36:59

标签: c structure

我有一个数组'y',x不。其中的元素(数字'x'由用户给出),我需要创建一个结构数组,其元素与数组'y'中的元素完全相同,即结构数组将具有'x'元素

3 个答案:

答案 0 :(得分:0)

如果我理解你,你有一个某种类型的“数组”,元素的数量由用户决定。我猜你用这样的malloc分配它:

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

现在你想从一个结构创建一个类似的“数组”,具有相同数量的元素。为什么你不能像y那样做?即:

struct my_structure *new_array = malloc(x * sizeof(struct my_structure));

答案 1 :(得分: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...
   }

请注意,list数组中的每个数组(可能不是名称的最佳选择)可能包含不同数量的元素; num_elements告诉你特定阵列有多大。

请注意,C99 灵活数组成员在这里并不是真正的帮助。你不能拥有一个包含灵活数组成员的结构数组,尽管你可以有一个指向它们的指针数组。

答案 2 :(得分: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];
相关问题