我是编程的初学者,我在下面的代码中提出了一个关于创建动态多维数组的问题 我不明白这里的功能是什么原因
#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 << " values\n";
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;
}
答案 0 :(得分:3)
它的变量并没有做很多事情。你可以替换
行 int *p = new int[size];
arrs[i] = p;
与
arrs[i] = new int[size];
没有任何问题。
答案 1 :(得分:0)
您正在for循环中创建一个动态大小的int数组。 p指向新创建的int数组。然后,您可以将p(新int数组的地址)分配给指向int数组的指针数组的第i个位置(这就是下一个语句的作用:arrs[i]=p
)。
因此您的结构如下:
arrs(指向int数组的指针数组):
- arrs0:指向地址4711的int数组1
- arrs1:指向地址9876的int数组2
sizes(int的数组) - 保存int数组的大小(不是指向int数组的指针数组!)
- 0:2
- 1:3
int array 1(adr 4711)
- 0:17
- 1:23
int array 2(adr 9876)