如何在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]);
我对答案有何期待
以下应该是重点:
- 是否可以像我一样做一些事情?
- 是否有更好的方法或程序将
struct
个实例插入 struct
类型数组?
- 如果您觉得我缺乏任何概念知识,请提供信息。
当然可以。只需为指向 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;
}
我想做什么?
我想制作一个 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]);
我对答案有何期待
以下应该是重点:
- 是否可以像我一样做一些事情?
- 是否有更好的方法或程序将
struct
个实例插入struct
类型数组? - 如果您觉得我缺乏任何概念知识,请提供信息。
当然可以。只需为指向 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;
}