📅  最后修改于: 2023-12-03 15:13:59.378000             🧑  作者: Mango
在C++中,可以使用动态二维数组来实现更灵活的内存管理。动态二维数组是由多个一维数组组成的数组,可以通过指针和动态内存分配来创建。
动态二维数组的创建方式有多种,其中一种常见的方式是使用双重指针,先分配一维数组的空间,再为每个一维数组分配空间。
int **p = new int*[m]; // 分配空间
for(int i=0; i<m; i++){
p[i] = new int[n]; // 分配每个一维数组的空间
}
这段代码会创建一个m x n的动态二维数组,其中p是指向指针的指针。首先p会指向一个长度为m的整型指针数组,然后再为每个指针分配一个长度为n的整型数组。
动态二维数组的释放需要一层层地释放每个一维数组的空间,然后再释放指针数组的空间。释放的顺序要与分配时的顺序相反。
for(int i=0; i<m; i++){
delete[] p[i]; // 释放每个一维数组的空间
}
delete[] p; // 释放指针数组的空间
#include<iostream>
using namespace std;
int main(){
int m = 3, n = 4;
int **p = new int*[m]; // 分配空间
for(int i=0; i<m; i++){
p[i] = new int[n]; // 分配每个一维数组的空间
}
// 赋值
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
p[i][j] = i*n + j;
}
}
// 输出
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
cout<<p[i][j]<<" ";
}
cout<<endl;
}
// 释放
for(int i=0; i<m; i++){
delete[] p[i]; // 释放每个一维数组的空间
}
delete[] p; // 释放指针数组的空间
return 0;
}
输出结果为:
0 1 2 3
4 5 6 7
8 9 10 11