首页 > 解决方案 > 如何从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;
}

标签: arrayscpointers

解决方案


不为 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;
}

推荐阅读