arrays - 如何从c中的函数传递和返回二维数组
问题描述
我对 c 比较陌生,我仍然无法找到从函数传递和返回多维数组的好方法。我找到了以下代码,但它似乎不是一个好方法,因为它传递数组然后使用它,它使用 malloc 函数创建一个副本。有没有办法在没有复制和 malloc 函数的情况下做到这一点,或者有更好的方法从 c 中的函数传递和返回二维数组?谢谢。
#include <stdio.h>
#include <stdlib.h>
int **matrix_sum(int matrix1[][3], int matrix2[][3]){
int i, j;
int **matrix3;
matrix3 = malloc(sizeof(int*) * 3);
for(i = 0; i < 3; i++) {
matrix3[i] = malloc(sizeof(int*) * 3);
}
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++){
matrix3[i][j] = matrix1[i][j] + matrix2[i][j];
}
}
return matrix3;
}
int main(){
int x[3][3], y[3][3];
int **a;
int i,j;
printf("Enter the matrix1: \n");
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++){
scanf("%d",&x[i][j]);
}
}
printf("Enter the matrix2: \n");
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++){
scanf("%d",&y[i][j]);
}
}
a = matrix_sum(x,y); //asigning
printf("The sum of the matrix is: \n");
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++){
printf("%d",a[i][j]);
printf("\t");
}
printf("\n");
}
//free the memory
for(i = 0; i < 3; i++) {
free(a[i]);
}
free(a);
return 0;
}
解决方案
不为 agurments 复制数组。仅传递指向它们的第一个元素 ( int[3]
) 的指针。
为避免malloc()
,您应该添加另一个参数来指定应存储结果的数组。
#include <stdio.h>
void matrix_sum(int matrix3[][3], int matrix1[][3], int matrix2[][3]){
int i, j;
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++){
matrix3[i][j] = matrix1[i][j] + matrix2[i][j];
}
}
}
int main(){
int x[3][3], y[3][3], a[3][3];
int i,j;
printf("Enter the matrix1: \n");
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++){
scanf("%d",&x[i][j]);
}
}
printf("Enter the matrix2: \n");
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++){
scanf("%d",&y[i][j]);
}
}
matrix_sum(a,x,y);
printf("The sum of the matrix is: \n");
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++){
printf("%d",a[i][j]);
printf("\t");
}
printf("\n");
}
return 0;
}
推荐阅读
- javascript - 错误:找不到中央目录的结尾
- python - FutureWarning:如果 dtype='numeric',字节/字符串数组将被转换为十进制数
- javascript - 过滤并返回数组的多个值
- python - 覆盖 sqlalchemy.connect 上的现有数据库
- javascript - 在 wordmap 中的 d3.js 中渲染六边形
- java -
导入项目时在 .classpath 文件中被覆盖 - javascript - 消除数组中较小的值
- c - 代码在达到交换功能后停止,如果我将其注释掉,它会完美运行
- c - 关于 C 语言文件的 rewind() 函数的问题
- c++ - 不理解以下关于编译器可能对普通 {} 定义执行 `memcpy` 优化的评论