二维数组作为函数返回

Posted

技术标签:

【中文标题】二维数组作为函数返回【英文标题】:Bidimentional array as a function return 【发布时间】:2020-11-23 04:11:33 【问题描述】:

我不知道为什么我的功能不起作用。我的意思是我希望我的函数返回一个双向数组 long double[][],但是我的代码中有错误。谁能告诉我在函数中返回双向数组的正确形式?

long double[][] hilbert(int n)
    long double A[n][n];

    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            A[i][j]=0.0;
        
    
    return A;

【问题讨论】:

Does this help? 【参考方案1】:

我不知道为什么我的功能不起作用

它不起作用,因为您试图返回一个数组。在 C++ 中,函数的返回类型不能是数组(与维数无关)。

它也不起作用,因为您试图使用非编译时间常数的值来指定数组维度的大小。这在 C++ 中也是不允许的。

一个简单的解决方案是返回一个包含std::vectors 的std::vector。然而,还有更有效的方法来表示 2D 矩阵,例如行是一个接一个的单维向量。

【讨论】:

【参考方案2】:

您正在使用非编译时间常数的值指定数组维度的大小。

您在函数中创建的数组也将在内存的堆栈部分中创建,当您超出函数范围时,数组分配的内存将被释放,因此您无法返回。

可能解决这些问题的最好方法是创建一个动态数组,这样可以在运行时指定维度大小,您也可以从函数中返回它,并且在手动释放之前不会释放内存。

long double** hilbert(int n)

    // Making an array of pointers
    long double **A = new long double*[n];

    for (int i = 0; i < n; i++)
        // create an array of size n and put the
        // first element address to A[i]
        A[i] = new long double[n];

    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            A[i][j]=0.0;
        
    

    return A; // Return the array


int main() 

    // Creating array using the fucntion we've
    // just created .
    long double** array = hilbert(10);

    // Use the array
    std::cout << array[0][1] << std::endl;

    // free the memory when you're done ...

    return 0;

【讨论】:

以上是关于二维数组作为函数返回的主要内容,如果未能解决你的问题,请参考以下文章

c语言中怎么用二维数组作为函数参数

C 语言二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )

C-二维数组作为函数参数, 字符数组

C语言函数传递二维数组

opencl核函数怎么传二维数组实参

C语言函数中怎么返回一个二维数组