c++动态创建和销毁二维数组

如果二维数组中的高维确定,则可以TYPE (*p)[N] = new TYPE [][N]; 用这种方法。 

最常用的方法:

      使用数组指针,分配一个指针数组,将其首地址保存在b中,然后再为指针数组的每个元素分配一个数组
              
           int **b=new int*[row];       //分配一个指针数组,将其首地址保存在b中                                                     
           for(i=0;i<row;i++)             //为指针数组的每个元素分配一个数组
               b[i]=new int[col];
           
        该方法定义的动态二维数组的释放需先释放指针数组的每个元素指向的数组,然后再释放该指针数组:
           for(i=0;i<row;i++)
           {
                 delete [col]b[i];
                 b[i]=NULL;
           }
           delete [row]b;
           b=NULL;

简化的销毁方法:

for(int i=0;i<=len1;i++)
    {
        delete[] d[i];
    }
delete[] d;

推荐使用上面的做法。销毁的过程,先销毁指针数组每个元素指向的数组,然后再销毁这个指针数组

#include<iostream>
using namespace std;

void func(int m,int n)
{
     
     int x;
      
    int **p=new int*[m];
    for(int i=0;i<m;i++)
        p[i]=new int[n];

    for(int i=0;i<m;i++)
        for(int j=0;j<n;j++)
        {
            //cin>>x;

            p[i][j]=rand();
            
        }

    for(int i=0;i<m;i++)
    {

        for(int j=0;j<n;j++)
        {
            cout<<p[i][j]<<ends;
        }
        cout<<endl;
    }

    for(int i=0;i<m;i++)
    {
        delete[n] p[i];
        p[i]=NULL;
    }
    delete [n]p; //经过测试p还不为NULL
    p=NULL;
     
}

 

int main()
{
    func(5,5);

}

还可以用vecotor方便生成:

#include   <iostream>   
#include   <vector>   
#include   <iomanip>   
  using   namespace   std;   
  int   main()   
  {   
    int   i,   
            j,   
            m,   //行数   
            n;   //列数   
    
    cout   <<   "input   value   for   m,n:";   
    cin>>m>>n;   
      
    //注意下面这一行:vector<int后两个">"之间要有空格!否则会被认为是重载">>"。   构造函数Conatiner c(n,t) n elem,eachvalue  is t
    vector<vector<int>   >   vecInt(m,   vector<int>(n));       
    for   (i   =   0;   i   <   m;   i++)   
      for   (j   =   0;   j   <   n;   j++)   
        vecInt[i][j]   =   i*j;     
          
    for   (i   =   0;   i   <   m;   i++)   
    {   
      for   (j   =   0;   j   <   n;   j++)   
        cout<<setw(5)<<vecInt[i][j]<<":"<<setw(9)<<&vecInt[i][j];   
      cout<<endl;   
    }   
    
    return   0;   
  }

http://www.diybl.com/course/3_program/c++/cppsl/2008316/104783.html


                                        

原文地址:https://www.cnblogs.com/youxin/p/2502633.html