创建动态多维数组

creating dynamic multidimensional arrays

本文关键字:数组 动态 创建      更新时间:2023-10-16

我是一个完全的编程初学者,我在下面的代码中有一个问题,它是关于创建一个动态多维数组我不明白p的原因在这里

它的作用是什么
#include <iostream>
using namespace std;
void print2DArr(int** arp,int *ss,int nrows)
{
    for(int i=0;i<nrows;i++){
        for(int j=0;j<ss[i];j++){
            cout << arp[i][j] <<" ";
        }
        cout << endl;
    }
}
void main()
{
    int count;
    cout << "How many arrays you have?n";
    cin >> count;
    int **arrs = new int*[count];
    int *sizes = new int[count];
    //int *arrs[3];//static array of pointers
    for(int i=0;i<count;i++)
    {
        int size;
        cout << "Enter size of array " << (i+1) << endl;
        cin >> size;
        sizes[i]=size;
        int *p = new int[size];
        arrs[i] = p;
        //arrs[i] = new int[size];
        cout << "Enter " << size << " valuesn";
        for(int j=0;j<size;j++)
            //cin >> p[j];
            cin >> arrs[i][j];
    }
    print2DArr(arrs,sizes,count);
    //delete (dynamic de-allocation)
    for(int i=0;i<count;i++)
        delete[] arrs[i];
    delete[] arrs;

}

它是变量,不会做很多事情。您可以替换线条

    int *p = new int[size];
    arrs[i] = p;

    arrs[i] = new int[size];

没有任何问题。

您正在 for 循环中创建一个动态大小的 int 数组。 p 指向新创建的 int 数组。然后,您可以将 p(新 int 数组的地址)分配给指向 int 数组的指针数组的第 i 个位置(这就是下一条语句的作用:arrs[i]=p )。

因此,您的结构如下所示:

arrs(指向 int 数组的指针数组):
- arrs0:指向地址 4711
处的整数数组 1- ARRS1:指向地址 9876
处的 int 数组 2

大小(int 数组) - 保存 int 数组的大小(而不是指向 int 数组的指针数组!
- 0:2
- 1:3

整数阵列 1 (ADR 4711)
- 0:17
- 1:23

整数阵列 2 (ADR 9876)