假设我使用main()从文件中读取并占用2D数组int arr[S1][S2]
,其中S1
和S2
是从文件中确定的。如果我想将此数组传递给函数,如何将多维数组编写为具有正确边界S1
和S2
的函数参数?
int some_function(int arr_copy[S1][S2], ...);
int main()
{
/* read file and occupy arr[S1][S2] */
}
显然上述问题是因为S1
和S2
未定义。
答案 0 :(得分:3)
显而易见的解决方案是编写基于的Matrix类
std::vector
,并使用它。然后你会宣布
函数对矩阵进行(可能const
)引用,
并完成它。它比任何一个都容易得多
替代品,更安全。
如果您真的坚持在main
中使用C样式数组,那么
您可以将该函数定义为模板:
template <size_t S1, size_t S2>
int
some_function( int const (&array)[S1][S2], ...) ...
编译器将确定S1
和S2
的实际值
来自您传递的数组的声明。
答案 1 :(得分:1)
如果必须传递一个数组,那么该函数应该为int*
和两个参数提供边界。最好为数组使用容器类,通过引用(或const引用)传递。
编辑:尽管如此,做詹姆斯推荐的模板。 : - )