我有一个数组'y',x 没有。它里面的元素(数字'x'由用户给出),我需要创建一个结构数组,其元素的类型与数组'y'中的元素完全相同,即结构数组将具有'x'元素.
问问题
1015 次
3 回答
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 回答
0
您可能需要这样的结构。数组的类型显示为ArrayType
;你可以写int
或double
其他任何适合你的东西。
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灵活数组成员在这里并不是真正的帮助。您不能拥有包含灵活数组成员的结构数组,尽管您可以拥有指向它们的指针数组。
于 2012-04-16T12:44:49.527 回答
0
如果我理解正确,您有某种类型的“数组”,元素的数量由用户决定。我猜你是malloc
这样分配的:
type_of_y *y = malloc(x * sizeof(type_of_y));
现在你想从一个结构中创建一个类似的“数组”,具有相同数量的元素。为什么你不能像你那样做y
呢?IE:
struct my_structure *new_array = malloc(x * sizeof(struct my_structure));
于 2012-04-16T12:43:30.370 回答