gpt4 book ai didi

c++ - 使用类型转换在 C++ 中返回二维数组

转载 作者:太空宇宙 更新时间:2023-11-04 16:23:57 26 4
gpt4 key购买 nike

int** function()
{
int M[2][2] = {{1,2},{3,4}};
return (int **)M; //is this valid?
}

void anotherFn()
{
int **p = new int*[2];
for(int i = 0; i<2; i++) {
p[i] = new int[2];
}

p = function();
cout << p[0][0];
}

上面的代码编译但给出了运行时错误。那么,只有当它被声明为双指针时,我才能返回一个二维数组,或者有什么方法可以将数组作为二维指针返回吗?

最佳答案

您将二维数组表示为指向 int 的指针。这是个坏主意。一个更好的主意是使用 std::vector<std::vector<int>> .更好的方法是使用专门的类(class)。但关键是,一旦你摆脱了指针,你就可以毫无问题地返回值:

matrix_2d function() {
matrix_2d M = {{1, 2}, {3, 4}};
return M;
}

这对于 matrix_2d 的适当定义非常有效(见上文)。

Your code makes this whole process much more complicated by using pointers , 并访问无效内存。特别是,您在 main 函数中分配内存,但随后您丢弃指向该内存的指针,方法是重新分配它,结果为 function() : 里面 function您没有使用先前分配的内存,而是使用堆栈分配的内存并返回指向该内存的指针。一旦函数退出,堆栈分配的内存就消失了。

关于c++ - 使用类型转换在 C++ 中返回二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13917388/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com