题解 | #创建二维动态数组#
创建二维动态数组
https://www.nowcoder.com/practice/9e55995c4e5345878a31682e4048a0ed
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int** allocate2DSpace1(int n1, int n2) {
//使用指针数组的方式描述二维数组
//用二级指针描述指针数组
int** p = new int* [n1]; //先用确定的行数来确定指针数组的大小
for (int i = 0; i < n1; i++) {
p[i] = new
int[n2];//确定每一行对应的指针的数组中的指针所指向的数组的大小
}
return p;
}
bool allocate2DSpace2(int*** p1, int n1, int n2) {
*p1 = new int* [n1]; //先用确定的行数来确定指针数组的大小
for (int i = 0; i < n1; i++) {
(*p1)[i] = new
int[n2];//确定每一行对应的指针的数组中的指针所指向的数组的大小
}
return true;
}
void free2DSpace(int** p, int row) {
for (int i = 0; i < row;
++i) { //从指针数组中的指针所指向的数组开始释放
delete [] p[i];
}
delete [] p;//最后释放指针数组
}
int main() {
int n;
cin >> n;
// write your code here......
//好像用指针数组的方式描述不了 只能用二级指针或者三级指针来描述
int** p = allocate2DSpace1(n, n);
// int **p1 = nullptr;
// allocate2DSpace2(&p1,n,n);
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
p[i][j] = i + j;
}
}
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cout << p[i][j] << " ";
}
cout << endl;
}
free2DSpace(p, n);
return 0;
}
