在c ++中动态分配2D数组的行

时间:2012-01-09 22:20:46

标签: c++ dynamic rows multidimensional-array

在c ++中,我可以创建一个具有固定列数的2D数组,例如5,如下所示:

char (*c)[5];

然后我可以为行分配内存,如下所示

c = new char[n][5];

其中n可以是任何即使在运行时也可以赋值的变量。我想知道是否以及如何使用此方法为每行动态分配可变数量的内存。即我想使用第一个语句,但可以修改第二个语句。

3 个答案:

答案 0 :(得分:4)

不是指向数组的指针,而是指向一个指针指针,用指针数组填充,每个指针的元素依次用一个字符数组填充:

char ** c = new char*[n];  // array of pointers, c points to first element

for (unsigned int i = 0; i != n; ++i)
    c[i] = new char[get_size_of_array(i)]; // array of chars, c[i] points to 1st element

更多的C ++数据结构是std::vector<std::string>

正如您在评论中注意到的那样,使用new[]分配的动态数组无法调整大小,因为C ++中没有realloc的模拟(如果你对象模型没有意义)想一想)。因此,在动态生命周期管理的任何手动尝试中,您应该总是更喜欢合适的容器。

总结:不要使用new。永远。使用适当的动态容器。

答案 1 :(得分:1)

您需要按如下方式声明c:char** c;然后,按如下方式分配主要数组:c = new char*[n];然后,按如下方式分配每个次要数组:c[i] = new char[m]

答案 2 :(得分:0)

#include <iostream>
using namespace std;

main()
{
    int row,col,i,j;
    cout<<"Enter row and col\n";
    cin>>row>>col;

    int *a,(*p)[col]=new (int[row][col]);
    for(i=0;i<row;i++)
            for(j=0;j<col;j++)
                p[i][j]=i+j;

        for(i=0;i<row;i++)
            for(j=0;j<col;j++)
                cout<<i<<" "<<j<<" "<<p[i][j]<<endl;
                //printf("%d %d %d\n",i,j,p[i][j]);




}