我正在用 C++ 创建一个二维数组,需要将该数组作为参数传递给函数。在我的函数中,我需要从数组中访问一个元素,以便将其保存为一个值,即:
int lowestPoint(int **arr, int x, int y, int n) {
minVal = *(*(arr+x)+y); // here is where I'm getting the exception
return minVal;
}
我试过将 minVal 设置为 arr[X][Y]
并尝试将数组作为其他变体传递,而不仅仅是 **arr 但似乎没有任何效果。
数组在我的主函数中初始化为 int arr[x][y]
我通过将其转换为 otherFunc(reinterpret_cast<int **>((*arr)[n]), n)
将其传递给另一个函数,然后从该函数调用 int val = lowestPoint(arr,i,j,n)
将其发送到 lowestPoint .我认为这些调用可能有问题,但我不确定如何修复它——我真的没有使用 C++ 中的二维数组的经验,而且它在 Java 中简单得多。我一直收到数组的 EXC_BAD_ACCESS 错误,所以如果有人知道如何解决这个问题,我将不胜感激。谢谢!
编辑:
“n”是数组的大小;例如,如果它是一个 3x3 数组,n = 3。我只是将数组初始化为 int arr[n][n]
然后存储元素。我知道实际的数组本身代表正确的值,一旦我将它发送到另一个函数,它就无法访问它。
最佳答案
当您使用 reinterpret_cast((*arr)[n]) 将数组传递给第一个函数时,不是将指针传递给实际数组,而是传递位置 [0][n] 中的值(通过使用(*arr)[n]) 并将 it 转换为 **arr。所以本质上你得到一个新数组,它指向内存中的一个随机位置,该位置等于该数组槽的内容。
我不确定你打算做什么,但如果你想传递实际的数组,只需传递 arr。如果您计划传递一个子数组,则此方法完全不正确,因为您在数组内传递一个偏移量,您将得到倾斜的数据。
希望这有帮助, 里尔
关于c++ - 从 C++ 中的 int ** 数组访问元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58386918/