设为首页 加入收藏

TOP

21.4 本章实例
2013-10-07 01:15:00 来源: 作者: 【 】 浏览:67
Tags:21.4 本章 实例

21.4  本章实例

本节将演示在堆上实现动态二维数组的方法。申请内存空间时有两种方法:

第一种是先申请若干个指针,然后再为每个指针申请一块内存块。这相当于先申请的指针指向行首部,后分配的空间则是每一行的数据空间。用户也可以将先分配的指针解释为列首,而后分配的指针作为列数据的空间。

另一种方法是直接申请若干空间,然后在访问时根据算法来模拟成二维数组。

下面将给出第一种分配方案的代码,第二种方案将留作上机练习。

【实例21-1】 在堆上实现动态二维数组。

  1. #include <iostream>  
  2. using namespace std;  
  3. int main(int argc, char *argv[])  
  4. {  
  5.     int nrow=0;  
  6.     int ncol=0;  
  7.     int row_size=0;                 //行数  
  8.     int col_size=0;                 //列数  
  9.     int **p;                        //二维数组的指针  
  10.     cin>>row_size;  
  11.     cin>>col_size;  
  12.     p = new int*[row_size];         //在堆上申请
    row_size个指针指向数组的行首
     
  13.     for(nrow=0;nrow<row_size;nrow++)  
  14.     {  
  15.         p[nrow] = new int[col_size];    //在堆上为每行申请col_size个空间,相当
    //于列数
     
  16.     }  
  17.     //初始化  
  18.     for(nrow=0;nrow<row_size;nrow++)  
  19.     {  
  20.         for(ncol=0;ncol<col_size;ncol++)  
  21.         {  
  22.             p[nrow][ncol] = nrow+ncol;  
  23.         }  
  24.     }  
  25.     //使用内存块   
  26.     for(nrow=0;nrow<row_size;nrow++)  
  27.     {  
  28.         for(ncol=0;ncol<col_size;ncol++)  
  29.         {  
  30.             cout<<"["<<nrow<<"]["<<ncol<<"] = "<<p[nrow][ncol]<<"; ";  
  31.         }  
  32.         cout<<endl;  
  33.     }  
  34.     //释放二维数组在堆上的内存   
  35.     for(nRow=0;nRow<ROW_SIZE;nRow++)  
  36.     {  
  37.         //释放二维数组的行数组内存  
  38.         delete[] p[nRow];   
  39.     }  
  40.     //释放二维数组的列数组内存  
  41.     delete[] p;   
  42.     //设置为空,避免野指针  
  43.     p = NULL;   
  44.     getchar();   
  45.     return 0;  

分析:该实例演示了怎样创建、使用以及删除一个堆上的二维数组。示例中的代码使用了本节静态存储区、栈和堆,上述代码也演示了如何释放动态二维数组的内存。这也是很多初学者难以理解的地方。

  1. [0][0]=0; [0][1]=1;  
  2. [1][0]=1; [1][1]=2;  
  3. [2][0]=2; [2][1]=3; 

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇21.5 上机实践 下一篇详细讲述C#数组和指针

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: