1. 程式人生 > >動態申請二維陣列。

動態申請二維陣列。

動態申請二維陣列可以先申請一個一維陣列,然後再將其按地址分割成陣列:

如想申請一個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;

}

這樣申請的陣列需要注意的指標的越界,即一個字元陣列的寫入長度超出其設定的長度,會覆蓋下一個字元陣列,不知道有沒有其他更好的方法?