C中结构变量的动态名称

C中结构变量的动态名称,c,structure,C,Structure,我有一个数组“y”,里面有x个元素(数字“x”由用户给定),我需要创建一个结构数组,其中的元素类型与数组“y”中的元素类型完全相同,即结构数组将有“x”元素。如果我理解正确,您有某种类型的“数组”,元素的数量由用户决定。我猜您可以使用malloc这样分配它: type_of_y *y = malloc(x * sizeof(type_of_y)); 现在,您需要从一个结构中创建一个类似的“数组”,具有相同数量的元素。为什么你不能像对待y那样做呢?即: struct my_structure *

我有一个数组“y”,里面有x个元素(数字“x”由用户给定),我需要创建一个结构数组,其中的元素类型与数组“y”中的元素类型完全相同,即结构数组将有“x”元素。

如果我理解正确,您有某种类型的“数组”,元素的数量由用户决定。我猜您可以使用
malloc
这样分配它:

type_of_y *y = malloc(x * sizeof(type_of_y));
现在,您需要从一个结构中创建一个类似的“数组”,具有相同数量的元素。为什么你不能像对待
y
那样做呢?即:

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

您可能需要这样的结构。数组的类型显示为
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;
}
请注意,
列表
中的每个数组(可能不是名称的最佳选择)可能包含不同数量的元素;
num\u元素
告诉您特定数组有多大

请注意,C99灵活阵列成员在这里并不是真正的帮助。虽然可以有指向灵活数组成员的指针数组,但不能有包含灵活数组成员的结构数组。

/*新数组*/
/* 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];
MYSTRUCT*abc=(MYSTRUCT*)calloc(x,sizeof(MYSTRUCT)); /*将“y”的内容复制到新数组中*/ 对于(int i=0;i
不错。您遇到了什么问题?如果您有一个数组,您必须有一个长度才能安全地使用它。为什么不能分配一个长度相同的结构数组?在设置结构的两个部分时使用
calloc()
没有优化:)
/* 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];