2013-05-08 129 views
0

以下行不起作用:C++二维数组初始化

int n1=10,v1=10; 
int f[n1][v1]={}; 
error: variable-sized object ‘f’ may not be initialized 

但低于作品行,为什么呢?

const int n1=10,v1=10; 
int f[n1][v1]={}; 
+0

在第一个中,'f'是一个可变长度的数组。那些不能被初始化。第二,它不是VLA,因此可以初始化。 – 2013-05-08 21:27:03

+1

看到http://stackoverflow.com/questions/1887097/variable-length-arrays-in-c讨论为什么你被限制在固定长度的数组 – OOhay 2013-05-08 21:30:07

回答

2

数组初始值设定项需要为const。

由于const int值在整个程序中保持不变,所以int值可以改变位置。

+0

我看到了,我可以把const int参数? void test1(const int&n){int_f0 [n];}; int f1 [n] = {}; (int i = 0; i wenfeng 2013-05-08 21:38:54

+0

它似乎并不如此,这是用Cygwin下的G ++ 4.5.3测试的: http://codepaste.net/gwnck4 – 2013-05-08 21:48:26

0

在第二示例中,n1v1已知是编译时间常数。在第一个例子中,它们可能不是。