二维数组作为函数返回
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::vector
s 的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;
【讨论】:
以上是关于二维数组作为函数返回的主要内容,如果未能解决你的问题,请参考以下文章