繁体   English   中英

从 C++ 中的 int ** 数组访问元素

[英]Accessing an Element from an int ** array in C++

我正在 C++ 中创建一个二维数组,并且需要将此数组作为 function 中的参数传递。 在我的 function 中,我需要访问数组中的一个元素才能将其保存为一个值,即:

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 但似乎没有任何效果。

该数组在我的主 function 中初始化为int arr[x][y]并通过将其转换为otherFunc(reinterpret_cast<int **>((*arr)[n]), n)将其传递到另一个 function ,然后从 function 中,通过调用int val = lowestPoint(arr,i,j,n)将其发送到最低点。 我认为这些调用可能有问题,但我不确定如何解决它 - 我真的没有使用 C++ 中的 2D arrays 的经验,而且它在 ZD52387880E1EA22817A72D3859Z23 中要简单得多。 我不断收到数组的 EXC_BAD_ACCESS 错误,所以如果有人知道如何解决这个问题,我将不胜感激。 谢谢!

编辑:“n”是数组的大小; 例如,如果它是一个 3x3 数组,n = 3。我只是将数组初始化为int arr[n][n] ,然后存储元素。 我知道实际数组本身代表正确的值,一旦我将它发送到另一个 function,它就无法访问它。

当您使用 reinterpret_cast((*arr)[n]) 将数组传递给第一个 function 时,不是将指针传递给实际数组,而是传递位置 [0][n] 中的值(通过使用 (*arr )[n]) 并将转换为 **arr。 所以本质上你会得到一个新数组,它指向 memory 中的随机位置,该位置等于该数组插槽的内容。

我不确定你打算做什么,但如果你想传递实际的数组,只需传递 arr。 如果您计划传递子数组,则此方法完全不正确,因为您在数组内传递偏移量,您将获得倾斜的数据。

希望这会有所帮助,Lior

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM