21.4 本章实例
本节将演示在堆上实现动态二维数组的方法。申请内存空间时有两种方法:
第一种是先申请若干个指针,然后再为每个指针申请一块内存块。这相当于先申请的指针指向行首部,后分配的空间则是每一行的数据空间。用户也可以将先分配的指针解释为列首,而后分配的指针作为列数据的空间。
另一种方法是直接申请若干空间,然后在访问时根据算法来模拟成二维数组。
下面将给出第一种分配方案的代码,第二种方案将留作上机练习。
【实例21-1】 在堆上实现动态二维数组。
- #include <iostream>
- using namespace std;
- int main(int argc, char *argv[])
- {
- int nrow=0;
- int ncol=0;
- int row_size=0;
- int col_size=0;
- int **p;
- cin>>row_size;
- cin>>col_size;
- p = new int*[row_size];
- for(nrow=0;nrow<row_size;nrow++)
- {
- p[nrow] = new int[col_size];
- }
-
- for(nrow=0;nrow<row_size;nrow++)
- {
- for(ncol=0;ncol<col_size;ncol++)
- {
- p[nrow][ncol] = nrow+ncol;
- }
- }
-
- for(nrow=0;nrow<row_size;nrow++)
- {
- for(ncol=0;ncol<col_size;ncol++)
- {
- cout<<"["<<nrow<<"]["<<ncol<<"] = "<<p[nrow][ncol]<<"; ";
- }
- cout<<endl;
- }
-
- for(nRow=0;nRow<ROW_SIZE;nRow++)
- {
-
- delete[] p[nRow];
- }
-
- delete[] p;
-
- p = NULL;
- getchar();
- return 0;
- }
分析:该实例演示了怎样创建、使用以及删除一个堆上的二维数组。示例中的代码使用了本节静态存储区、栈和堆,上述代码也演示了如何释放动态二维数组的内存。这也是很多初学者难以理解的地方。
- [0][0]=0; [0][1]=1;
- [1][0]=1; [1][1]=2;
- [2][0]=2; [2][1]=3;
【责任编辑:
云霞 TEL:(010)68476606】