如何在c中的结构类型数组中插入结构实例?

How to insert a structure instance inside a structure type array in c?

我想做什么?

我想制作一个 struct 类型的数组并向其中插入 struct 个实例。

{"struct Matrix matrix1", "struct Matrix matrix2"}

到目前为止我做了什么?

我创建了一个函数 create_struct(),它为 struct 和 return 一个 struct 指针获取必要的参数。

typedef struct
{
    size_t rows, columns;
    int *table;
} mat;

mat *create_struct(int x, int y)
{
    mat *data = (mat *)malloc(sizeof(*data));
    data->table = malloc(sizeof(int[(x * y)]));
    data->columns = y;
    data->rows = x;
    return data;
}

然后我在这种情况下创建了一个指向对象的指针 struct 并尝试在 for 循环和 create_struct() 函数的帮助下插入 struct 个实例。但是这样做程序崩溃了。

int main()
{
    size_t dimensions[2][2] = {{3, 3}, {3, 2}};

    mat *matrix;

    for (size_t i = 0; i < 2; i++)
    {
        matrix[i] = create_struct(dimensions[i][0], dimensions[i][1]);
    }

    return 0;
}

我认为主要问题出在这一行上。

matrix[i] = create_struct(dimensions[i][0], dimensions[i][1]);

首先,以上会导致编译错误a value of type "mat *" cannot be assigned to an entity of type "mat"

所以为了解决这个问题,我做了这样的事情。 我认为这是完全模糊的。我可能是错的。

matrix[i] = *create_struct(dimensions[i][0], dimensions[i][1]);

我对答案有何期待

以下应该是重点:

当然可以。只需为指向 mat 的指针分配内存,而不是取消引用未初始化的指针 matrix。或者使用指向 mat.

的指针数组
int main()
{
    size_t dimensions[2][2] = {{3, 3}, {3, 2}};

    mat** matrix = calloc(2, sizeof *matrix);
    // OR
    // mat* matrix[2];

    for (size_t i = 0; i < 2; i++)
    {
        matrix[i] = create_struct(dimensions[i][0], dimensions[i][1]);
    }

    return 0;
}