如果希望在运行时确定多维数组的维数,可以使用堆数组。动态分配二维数组内存需要使用指针的指针。多维数组的内存布局是不连续的,所以应首先为数组的第一个下标分配一个连续的数组。该数组的每个元素是指向另一个数组的指针,另一个数组保存的是第二个下标维度的元素。
分配内存的操作如下
// 动态分配二维数组及赋值
#include <iostream>
using namespace std;
int main() {
//动态分配二维数组内存
int ** ptr;
ptr = new int *[3];
int i = 0;
for( i = 0; i < 3;++i){
ptr[i] = new int[3];
};
//
//数组赋值
int j;
for (i = 0; i < 3; ++i) {
for (j = 0; j < 3; ++j) {
ptr[i][j] = i+j;
cout << ptr[i][j] << " ";
}
cout << endl;
}
return 0;
}
上面代码的执行结果为
0 1 2
1 2 3
2 3 4
释放内存
动态分配的二维数组的内存同样需要使用delete来释放,应注意使用循环来释放第一个下标分配的内存。释放内存的造作如下
//内存释放
for (i = 0; i < 3; ++i) {
delete [] ptr[i];
}
delete [] ptr;
ptr = nullptr;
cout << "Memory is cleaned!" << endl;