题解 | #创建二维动态数组#

创建二维动态数组

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;
}

全部评论

相关推荐

求个公司要我:接好运
点赞 评论 收藏
分享
shtdbb_:还不错,没有让你做了笔试再挂你
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务