如何初始化所有元素为 0 的指针的二维动态内存数组

How do I initialize a 2-D dynamic memory array of pointers with all elements 0

本文关键字:二维 动态 数组 内存 指针 初始化 元素      更新时间:2023-10-16

我想将二维数组的值初始化为 0。但这似乎不起作用。我可以在构造函数中将我的 ** 数组的值初始化为 0 吗?如果是,如何。我的代码是。

#include <iostream>
using namespace std;
int main(){
int row, col;
cin>>row;
cin>>col;
int **array=new int*[row];
        for (int i=0; i<row; i++){
            array[i]=new int[col];
        }
            for (int i=0; i<row;i++){
                for (int j=0; j<col; j++){
                    array[i][j]={'0'};
                    cout<<array[i][j]<<" ";
                }
                cout<<endl;
            }

}

有人可以进一步解释,如果我必须用其他元素替换数组中的第 i 个 elem,我将如何处理内存分配。

你可能想要array[i][j]=0;。你为什么使用char类型'0'?但是,有一种更简单的方法:array[i]=new int[col]();,只需将()添加到值初始化每列。

还有一个更好的方法:

std::vector<std::vector<int>> array(row, std::vector<int>(col));

对于您的第一条评论,您需要创建一个具有新大小的新数组,复制所有数据,然后删除旧的二维数组。

对于您的第二条评论,这里有一个例子:

struct A
{
    int **array;
    A(int row, int col) : array(new int*[row])
    {
       for (int i=0; i < row; i++)
       {
          array[i]=new int[col]();
       }
    }
};

PS:您可以使用std::vector节省大量工作。

此代码适用于 gcc

#include <iostream>
using namespace std;
int main(){
int row, col;
cin>>row;
cin>>col;
int **array=new int*[row];
    for (int i=0; i<row; i++){
        array[i]=new int[col];
    }
        for (int i=0; i<row;i++){
            for (int j=0; j<col; j++){
                array[i][j]=0;
                cout<<array[i][j]<<" ";
            }
            cout<<endl;
        }
}

要将数组的第 i 个元素替换为其他元素,我们可以执行以下操作:

int *aa = new int[p];
swap(array[i], aa)

但是要使其在逻辑上正确,您需要确保数组 [i] 指向的 p>= 大小。在我们的大多数用例中,我们使它们相同。

你可以尝试这样的事情:-

class A
{
 public:
 A():my2DArray() {0}
 private:
 B* my2DArray[max1][max2];
 };