動態申請二維陣列。
動態申請二維陣列可以先申請一個一維陣列,然後再將其按地址分割成陣列:
如想申請一個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;
}
這樣申請的陣列需要注意的指標的越界,即一個字元陣列的寫入長度超出其設定的長度,會覆蓋下一個字元陣列,不知道有沒有其他更好的方法?