c - 以结构形式编写的矩阵的动态内存分配
问题描述
我需要为包含矩阵的结构分配内存:
typedef struct matrix{
int row;
int column;
int **data;
}MATRIX;
我需要在一个单独的函数中完成所有这些工作。我有点困惑,因为我不确定我应该如何为结构内部的矩阵 [row*column] 分配内存,该结构还包含有关行和列大小的数字信息。根据我的(明显有缺陷的)逻辑,这意味着我需要为 struct 分配内存,输入有关行和列大小的信息,然后为结构内部的矩阵额外分配内存。我对此有点困惑,但这是我迄今为止想出的:
int** alloc(MATRIX *array , int row , int column){
int i;
array->data = (int**)malloc(row * sizeof(int*));
for(i=0; i<br_red; i++){
array->data[i] = (int*)malloc(column * sizeof(int));
}
return array->data;
}
然后在main()
我里面:
MATRIX *array = (MATRIX*)malloc(sizeof(MATRIX));
scanf("%d" , &array->row);
scanf("%d" , &array->column);
array->data = alloc(array , array->row , array->column);
这段代码可以正常工作,但我的任务是为一个类型函数(返回完全分配的结构+矩阵)内的所有数据完全分配内存,MATRIX*
而无需跳回进行main()
扫描。
解决方案
您可以更改alloc
函数以在内部分配 aMATRIX
并将其作为函数结果返回,如下所示:
MATRIX* alloc (int row , int column)
{
MATRIX *array = (MATRIX *) malloc (sizeof (MATRIX));
array->data = (int**)malloc(row * sizeof(int*));
for (int i = 0; i < row; i++)
array->data[i] = (int*)malloc(column * sizeof(int));
return array;
}
你的main
然后变成:
int row, column;
scanf("%d" , &row);
scanf("%d" , &column);
MATRIX *array = alloc (row, column);
之前的强制转换malloc
不是必需的(在 C 中),但它们是无害的。
推荐阅读
- java - 为什么Visual Studio Code在实际输出之前显示路径使用Java时
- javascript - x 轴刻度未出现在 d3 中
- macos - * 在 Mac 终端中跟随文件名是什么意思
- javascript - 通过ajax发送一个js数组
- linux - 如何使用 puts (AT&T, x86_64) 重新格式化要打印为字符串的整数
- javascript - 为什么我不能添加任务并将其呈现到列表中?
- list - 元素列表,向右滚动的元素
- python - 查找通过质心的每条线段的长度,以及如何将线限制到外轮廓
- python - 为什么转义序列不能在元组中工作
- java - 从 ActionListener 接口实例化 ActionListener 类型对象