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;
 


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