将具有可变维度的2D数组作为函数参数传递

时间:2012-12-11 10:27:58

标签: c++ c arrays multidimensional-array

我刚刚在codechef的成功提交中看到了以下代码。

http://www.codechef.com/viewplaintext/1595846

我曾经认为

float max(int n,int arr[n][n])
{....}
在C ++中不允许

(因为'n'是变量)。我的CodeBlocks(在Windows上)与MinGW [gcc 4.4]给出编译时错误。 “错误:数组绑定不是整数常量。

然后CodeChef的判断如何接受这样的解决方案。 是否有任何特殊标志允许我们在C ++中执行此操作

编辑: 显示状态为AC(已接受)的链接: http://www.codechef.com/viewsolution/1595846

2 个答案:

答案 0 :(得分:5)

ISO C99允许使用可变长度自动数组,作为扩展,GCC在C90模式和C ++中接受它们。这些数组的声明与任何其他自动数组一样,但其长度不是常量表达式。

参考:http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html

答案 1 :(得分:4)

我的观点是纠正的:C99确实允许使用C语言,尽管很多编译器还没有实现它,有些可能永远不会(微软)。

上一个回答

将arr作为int **传递或使用

之类的东西
template< int N >
float max(const int (&arr)[N][N])
{ ... }

当然要求N为编译时常量。最安全的解决方案是使用std :: vector或其他知道其大小的容器。

总的来说,代码对我来说似乎很脆弱。