今天最算法project时遇到需要使用一个动态数组,并且这个数组在编译时还是不知道大小的,到底能不能给二维数组动态分配空间,我还真没试过。是不是跟一维数组一样?用int *ar = new int[n][m],试了一下不行。
后来试了很多方法参考了网上的资料终于理解了,其实方法还是跟一维数组一样,至少说二维数组可以看成是地址的地址。具体方法如下:
void test_two_array()
{
{
int r ,c ;//r 表示行,c表示列
cin >> r>> c;
cout<<endl ;
//数组的第一维动态分配空间,相当于动态分配一个类型为Int* 的数组的空间相当于ar[],想给每一行分配the array with row r,column c
//相当于创建一个指针数组int*[],每一个数组元素是一个指针,代表一行,共r行
int * *ar = new int*[r] ;
//相当于创建一个指针数组int*[],每一个数组元素是一个指针,代表一行,共r行
int * *ar = new int*[r] ;
for (int i = 0 ;i< r ; i++)
{
*(ar+i) = new int[c]; //相当于给每一行动态分配c个数组元素空间,每个其实就是一列(相当于对每个数组的第二维动态分配空间 ar[][] 给各个列分配),
//i=0是表示给第一行分配c个整型元素空间
}
{
*(ar+i) = new int[c]; //相当于给每一行动态分配c个数组元素空间,每个其实就是一列(相当于对每个数组的第二维动态分配空间 ar[][] 给各个列分配),
//i=0是表示给第一行分配c个整型元素空间
}
//test
for (int i = 0 ; i < r ; i++)
{
{
for (int j = 0 ; j<c ; j++)
{
ar[i][j] = 10*(i+1)+(j+1) ;
cout << ar[i][j] << "\t" ;
}
cout << endl ;
}
转载于:https://blog.51cto.com/pingpeace/284555