以下代码细运行 -问题变为尺寸在C 2-d阵列++
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])’
此外,以下运行良好 -
3210任何人都可以在这里解释这个问题吗?谢谢。
假设'gcc'然后[此](http://stackoverflow.com/questions/14548753/passing-a-multidimensional-variable-length-array-to-a-function)可以提供一个答案虽然这不是一个很好的。 –
你的第二个也不是标准的C++。 – chris
@chris true,但'gcc'和'clang'至少支持VLA作为扩展。 –