C++中動態分配二維數組

在釋放指針之後一定要記得將其置爲NULL,否則在之後的程序中容易引起無法預知的錯誤。

#include

#define  N 4
typedef 
int  p[N]; // 方法一用到

using   namespace  std;

int  main()
{
    
int  n  =   0 ;

    
// 方法一:使用typedef定義一個具有N個元素的數組類型
    p  * ptr1;       // 定義二維數組??用法與二維數組相同
    ptr1  =   new  p[N];

    
for ( int  i  =   0 ; i  <  N; i ++ )
        
for ( int  j  =   0 ; j  <  N; j ++ )
            ptr1[i][j] 
=   ++ n;

    cout 
<<   " 方法一: "   <<  endl;
    
for (i  =   0 ; i  <  N; i ++ )
    {
        
for ( int  j = 0 ;j  <  N; j ++ )
            cout 
<<  ptr1[i][j]  <<   "   " ;
        cout 
<<  endl;
    }
    delete[] ptr1;
    cout 
<<  endl;

    
//  方法二:使用數組指針
     int  row  =  N;      // 二維數組的行數?
     int  column  =  N;   // 二維數組的列數
     
    
// 分配一個指針數組,其首地址保存在pMatrix中
     int   ** pMatrix  =   new   int * [row];

    
// 爲指針數組的每個元素分配一個數組
     for  ( int  i  =   0 ; i  <  row; i ++ )
        pMatrix[i] 
=   new   int [column];

    
// 以上是分配,以下是釋放
     for  ( int  i  =   0 ; i  <  row; i ++ )
        delete [] pMatrix[i];
    delete [] pMatrix;

  pMatrix=NULL;

    
// 這些技術可用於構造一個矩陣類

    
return   0 ;
}

先new一個int*數組,然後對每個int*分別new一個int*
得到的是int**,即2維數組,和一般2維數組一樣用
int** matrix = new int*[10];
for(int i=0; i<10; i++)
matrix[i] = new int[10];
matrix[2][5] = 3;
 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章