以下代码运行良好 -
void func(int m[][2])
{
cout<<(m[0][0])<<endl;
}
int main()
{
// int x=2;
int m[2][2];
m[0][0] = m[0][1] = m[1][0] = m[1][1] = 5;
cout<<m[0][0]<<endl;
func(m);
}
但是当我按照以下方式更改main()
时 -
int main()
{
int x=2;
int m[x][x];
m[0][0] = m[0][1] = m[1][0] = m[1][1] = 5;
cout<<m[0][0]<<endl;
func(m);
}
我收到错误消息 -
try.cpp:16:11: error: cannot convert ‘int (*)[(((long unsigned int)(((long int)x) + -0x00000000000000001)) + 1)]’ to ‘int (*)[2]’ for argument ‘1’ to ‘void func(int (*)[2])’
此外,以下运行正常 -
int main()
{
int x=2;
int m[x][x];
m[0][0] = m[0][1] = m[1][0] = m[1][1] = 5;
cout<<m[0][0]<<endl;
//func(m);
}
有人能在这里解释这个问题吗?感谢。
答案 0 :(得分:1)
可变长度数组在C ++中无效。 g ++允许这作为“扩展”。
int x=2;
int m[x][x]; //Illegal in C++
如果要为数组动态分配内存,则应选择动态内存分配。
int x=2;
int *m = new int[x];
最好使用STL:
int x = 10;
std::vector<int> m(n);
或者您可以在创建时使用 const 而不是变量。
const int x=2; //it's a compile time constant
int m[x][x];