c++ - 我无法从 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)中的普通数组不会按值传递,除非包装在结构中。
您可以返回数组的副本,并希望编译器消除不必要的副本(他们通常会这样做)。
例如:
#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';
}
推荐阅读
- javascript - “电子邮件”的属性未定义
- android - Facing an issue where duplication of values occurs through TextField after button onclick
- android - What's the scope of a CoroutineScope?
- python-3.x - How do I use Python to implement a circular task that executes every 100ms
- python - num 变量后的 %x 是什么意思?
- ms-access - 如何使用命令按钮将记录从一个表推送到另一个表
- multithreading - 处理不同威胁的异步 TX/RX 串行端口的最佳方法
- python - Python字节实例问题
- jquery - 如何使用多个 Django FBV 通过 Ajax+jQuery 捕获和保存数据
- maven - 如何使用 GitHub 中的 Maven 从 NetBeans 项目迁移到 Java CI?