您的位置:

c++ new二维数组的使用

一、创建和初始化二维数组

在c++中,我们可以使用new来创建二维数组,将其声明为指向指针的指针,如下所示:

int **arr = new int*[rows]; //创建一个指向指针类型的指针
for(int i=0; i<rows; i++){
   arr[i] = new int[cols]; //针对第i个指针开辟一维数组
}

//我们也可以通过嵌套循环对刚创建的二维数组进行初始化
for(int i=0; i<rows; i++){
   for(int j=0; j<cols; j++){
      arr[i][j] = i+j;
   }
}

在上面的代码示例中,我们首先创建一个指向指针类型的指针,然后对每个指针开辟一维数组,最终创建了一个二维数组。在创建完成之后,我们还可以通过嵌套循环来对二维数组进行初始化。

二、访问二维数组

访问二维数组的方式与一维数组类似,我们可以直接使用下标操作符‘[]’来访问二维数组的各个元素,示例如下:

for(int i=0; i<rows; i++){
   for(int j=0; j<cols; j++){
      cout << arr[i][j]<< " ";
   }
   cout << endl;
}

上述代码使用嵌套循环遍历二维数组并输出每个元素的值,其中‘arr[i][j]’即为访问二维数组的方式。

三、释放二维数组的内存

在使用完二维数组之后,我们需要手动释放其动态分配的内存空间,可以使用delete和delete[]操作符。示例如下:

for(int i=0; i<rows; i++){
   delete[] arr[i]; //释放指向第i行的一维数组的内存空间
}
delete[] arr; //释放指向指针类型的指针的内存空间

我们首先使用循环将指向每个一维数组的指针依次释放,然后再释放指向指针类型的指针的内存空间。

四、二维数组的传递

当我们使用函数来对二维数组进行操作时,我们需要将该二维数组传递给函数。此时需要注意的是,函数在接收到该二维数组后仍然需要开辟内存空间,否则在对其进行操作时将会出现错误。示例如下:

void operateArr(int **arr, int rows, int cols){
   //首先在函数内部对二维数组进行内存分配
   int **newArr = new int*[rows];
   for(int i=0; i<rows; i++){
      newArr[i] = new int[cols];
   }
   //然后进行具体的操作,并在最后释放内存空间
   for(int i=0; i<rows; i++){
      for(int j=0; j<cols; j++){
         newArr[i][j] = arr[i][j] * 2;
      }
   }
   //释放内存空间
   for(int i=0; i<rows; i++){
      delete[] newArr[i];
   }
   delete[] newArr;
}

//在主函数中调用operateArr函数,并传递二维数组
int **arr = new int*[rows];
for(int i=0; i<rows; i++){
   arr[i] = new int[cols];
}
operateArr(arr, rows, cols);

在上述代码示例中,我们定义了一个operateArr函数,并在该函数中对二维数组进行操作。在函数内部,我们首先进行内存分配,然后进行具体的操作,并在最后释放内存空间。在主函数中,我们创建了一个二维数组,并将其传递给operateArr函数进行操作。