- 若不采用动态分配的方法,必须指定第二维的大小,否则无法使用数组,例如a[][10]是合法的,但a[10][]不是。
- 如果列数已知,可以通过如下来分配存储空间:
char (*c)[5]; c = new char[n][5];
delete []c; // 释放空间 // 对比一维的 char* c; c = new char[n];
|
如果列数未知,则不可能调用依次new就能创建该数组,即使数组的行数是已知的。
// 动态创建二维数组 template<typename T> void Make2DArray(T** &x, int rows, int cols) { // 创建行指针 x = new T * [rows]; // 为每一行分配空间 for (int i = 0; i < rows; ++i) x[i] = new T[cols]; } // 释放二维数组 template<typename T> void Delete2DArray(T** &x, int rows) { // 释放每一行所分配的空间 for (int i = 0; i < rows; ++i) delete [] x[i]; // 删除行指针 delete [] x; x= 0; // 防止用户继续访问已被释放的空间 }
|
阅读(1036) | 评论(0) | 转发(0) |