0

假设我使用 main() 从文件中读取并占用一个二维数组int arr[S1][S2],其中S1S2由文件确定。如果我想将此数组传递给一个函数,我怎样才能将多维数组编写为具有正确边界S1和的函数参数S2

int some_function(int arr_copy[S1][S2], ...);

int main()
{
/* read file and occupy arr[S1][S2] */
}

显然上述是一个问题,因为S1S2是未定义的。

4

2 回答 2

3

显而易见的解决方案是编写一个基于 Matrix 的类 std::vector,并使用它。然后,您将声明该函数以获取(可能const)对矩阵的引用,并完成它。它比任何替代品都容易得多,而且更安全。

如果你真的坚持在 中使用 C 风格的数组main,那么你可以将函数定义为模板:

template <size_t S1, size_t S2>
int
some_function( int const (&array)[S1][S2], ...) ...

编译器将根据您传递的数组的声明S1确定实际值。S2

于 2013-01-30T11:42:16.190 回答
1

如果您必须传递一个数组,那么该函数应该接受一个int*和两个参数作为边界。最好为数组使用容器类,通过引用(或常量引用)传递。

编辑:对于所有这些,请按照 James 对模板的建议进行操作。:-)

于 2013-01-30T10:51:58.667 回答