在C ++中将变量作为二维数组的维度问题

时间:2013-11-24 04:10:15

标签: c++

以下代码运行良好 -

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);
}

有人能在这里解释这个问题吗?感谢。

1 个答案:

答案 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];