【发布时间】:2011-09-24 23:18:29
【问题描述】:
又是一个初学者到中级的问题。我正在尝试将二维数组传递给 C++ 中的函数。我知道数组不能直接发送到函数,所以我首先创建了一个指针(名称已编辑,但你会明白的):
double input[a][b] = {{0, 0}, {0, 1}, {1, 0}, {1, 1}};
Class.calculate (*(input), a, b);
然后我尝试在所述函数中使用它 - 但似乎我不知道如何取消引用指针以便能够再次处理二维数组。我的代码(或多或少):
for (int x=0; x<=a; x++){
for (int y=0; y<=b; y++){
tmpInput[x][y]= (*input)[x][y];
}
}
编译器报错,即invalid types ‘double[int]’ for array subscript,但我还是想不通。我最好的选择是我没有正确取消引用二维数组,但另一个选择是 C++ 不能直接取消引用二维数组,而是依赖于在发送之前将数组转换为一维数组。有什么想法吗?
【问题讨论】:
-
当然,您可以“将数组发送到函数”。只需将其声明为“**double”(如 littleadv 建议的那样)或等效地声明为“*double[]”(如 Mahesh 建议的那样)。
-
@paulsm4:我尝试了@littleadv 的建议,并声明了
calculate(double** input, int a, int b),并用Class.calculate(input, a, b);调用它。没用:error: no matching function for call to ‘Class::calculate(float [(((unsigned int)(((int)a) + -0x00000000000000001)) + 1)][(((unsigned int)(((int)b) + -0x00000000000000001)) + 1)], int&, int&)’ -
您可能想要
x < a而不是x <= a(y和b相同)。
标签: c++ pointers multidimensional-array