题解 | #创建二维动态数组#
创建二维动态数组
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; }