我试着调试下面的代码,并且出现“访问冲突”错误。我不明白为什么第二个循环在访问第二行元素时失败,而第一个循环能够访问所有元素。2D阵列访问冲突
我搞砸了*
,&
和[]
,但无法弄清楚。
谢谢。
#include <iostream>
void a(const int* data, unsigned int nElements, unsigned int nColumns) {
for (unsigned int i = 0; i < nElements; ++i)
std::cout << data[i];
for (unsigned int i = 0; i < nElements/nColumns; ++i)
for (unsigned int j = 0; j < nColumns; ++j)
std::cout << (&data)[i][j];
}
int main() {
int arr[2][5] = {
{ 0, 1, 2, 3, 4 },
{ 5, 6, 7, 8, 9 }
};
a(*arr, 2 * 5, 5);
return 0;
}
你能解释一下你想要做的更多吗?有点不清楚。 – Ben
真正的问题在这里:(&data)[i]。由于数据是参数中的单个元素,因此&data是指向单个元素的指针。这意味着i> 0是一个问题。多维数组实际上是一块内存,当你在多维数组上进行[i] [j]操作时,编译器将其与[i] [j]中的指针数组区别开来。多维数组上的[i] [j]与[i * numcolumns + j]相同。 – thang