C语言 如何返回一个二维数组

2024-11-22 20:16:44
推荐回答(3个)
回答1:

#include 
#include  // for malloc()
 
// 返回一个hilbert类型的(n * n)阶矩阵
double **hilbert(int n) {
    int i,j;
double **arr = (double **)malloc(n * sizeof(double *));
    for(i = 0; i < n; i++) {
arr[i] = (double *)malloc(n * sizeof(double));
        for(j = 0; j < n;j++) {
            arr[i][j] = 1.0/(i + j + 1);
        }
    }
return arr;
}

// 显示二维数组信息
void show(double **a,int n) {
int i,j;
for(i = 0; i < n; ++i) {
for(j = 0; j < n; ++j)
printf("%.4lf   ",a[i][j]);
printf("\n");
}
printf("\n");
}

// 释放动态内存
void freememory(double **a,int n) {
int i;
for(i = 0; i < n; ++i)
free(a[i]);
free(a);
}
 
int main () {
    double **a;
    a = hilbert(8);
    show(a,8);
freememory(a,8);// 内存释放动态,避免内存泄漏
a = hilbert(5);
    show(a,5);
freememory(a,5);// 内存释放动态,避免内存泄漏
    return 0;
}

回答2:

c语言,这里用malloc(头文件memory.h)申请对空间。
int **a=(int **)malloc(N*sizeof(int *));
int i;
for(i=0;i a[i]=(int *)malloc(N*sizeof(int));
};
当然a可以定义为全局变量。
int a[N][N];
放在main()函数之外,这样本文件里任何一个函数都能访问。

回答3:

1、函数不能返回一个数组,只能返回一个变量,或地址 。如果你想直接返回一个二维数组,这是做不到的。可以用下面的方法 ,先建一个结构体。struct array{int a[3][3];}; array solve(){array a;return a;} 通过这种方法,来得到二维数组。

2、数组在作为函数返回值或者函数参数时,实际上只作为指针来返回或者传递的。因此返回值用指针数据类型。比如下面的代码:int g_a[4] = {1,2,3,4};
int * retn_arrary() //返回值用指针类型即要。
{
return g_a;
}