首页 > 解决方案 > 我无法从 C++ 中的函数返回二维数组的地址

问题描述

当我尝试从函数返回二维数组并倾向于进一步使用它时,我不知道发生了什么问题。我在代码块中执行此操作(使用 C++)

错误是:无法将 'int (*)[3]' 转换为 'int**

这是代码:

 int** returnArray(){

 int a[3][3]={{1,2,5},{8,1,2}};
 return a;

 }

int main()

{
 int** k=returnArray();
 return 0;



 }

标签: c++

解决方案


当您从函数返回局部变量的地址时,该地址将变为无效,因为该变量在函数返回时不再存在。C ++(和C)中的普通数组不会按值传递,除非包装在结构中。

您可以返回数组的副本,并希望编译器消除不必要的副本(他们通常会这样做)。

例如:

#include <iostream>

struct MyArray {
    int a[3][3];
};

MyArray returnArray(){
    MyArray a = {{{1,2,5},{8,1,2}}};
    return a;
}

int main() {
    MyArray a_copy = returnArray();
    std::cout << a_copy.a[0][0] << ' ' << a_copy.a[0][1]  << ' ' << a_copy.a[0][2] << '\n';
    std::cout << a_copy.a[1][0] << ' ' << a_copy.a[1][1]  << ' ' << a_copy.a[1][2] << '\n';
    std::cout << a_copy.a[2][0] << ' ' << a_copy.a[2][1]  << ' ' << a_copy.a[2][2] << '\n';
}

推荐阅读