动态申请二维数组可以先申请一个一维数组,然后再将其按地址分割成数组:
如想申请一个row行col列的int 数组:
先申请一个row*col的in一维t数组 : int * pInt = new int[row*col];
再数申请一个指针数组,每个指针指向一行: int ** ppInt =new int*[col];
再调整该指针的位置:
for (int h=0;h<row;h++)
{
ppInt[h]=pInt+h*col;
}
具体如下:红色为使用malloc函数。
int ** D2Array(int row,int col)
{
int *pInt = new int[row*col];
//int *pInt = (int *)malloc(sizeof(int)*row*col);
int **ppInt =new int*[col];
//int **ppInt=(int **)malloc(sizeof(int*)*col);
for (int h=0;h<row;h++)
{
ppInt[h]=pInt+h*col;
}
return ppInt;
}
使用该方法创建的数组所有的元素在内存里是连续的
二、
首先申请一个大小为row的指针数组:int **ppInt=new int*[row];
再为每一个row分配大小为col的内存:
for (int h=0;h<col;h++)
{
ppInt[h] = new int[col];
}
具体如下:
int ** D2Array2(int row,int col)
{
//int **ppInt = (int **)malloc(sizeof(int *)*col);
int ** ppInt = new int*[col];
for (int h=0;h<col;h++)
{
//ppInt[h]=(int *)malloc(sizeof(int)*row);
ppInt[h] = new int[row];
}
return ppInt;
}
这样的申请的数组各元素在每一行内是连续的?
动态申请字符串数组,字符串数组可以将其当做一个二维的字符数组:
char ** D2CArray(int len,int size)
{
char ** pCArray = new char*[size];
for (int i=0;i<size;i++)
{
pCArray[i] = new char[len];
}
return pCArray;
}
char ** D2CArray2(int len,int size)
{
char * pCArray = new char[size*len];
char ** ppCArray= new char*[size];
for (int i=0;i<size;i++)
{
ppCArray[i]=pCArray+i*size;
}
return ppCArray;
}
这样申请的数组需要注意的指针的越界,即一个字符数组的写入长度超出其设置的长度,会覆盖下一个字符数组,不知道有没有其他更好的方法?