动态分配一维数组、二维数组!
某些数组在我们定义时并不能明确知道其范围,他们虽调用的变化而变化,当然我们也可以预定一个比较大的MAXNLEN但这种静态声明有时会浪费比较多的内存空间。我们可以用C++的动态内存分配机制来动态地确定一个数组的空间大小,使用动态内存分配时,一定不要忘了delete!!!
例如要给一个整数动态分配内存空间,必须用下面的语句声明一个整形指针变量。
int *y; // 把声明,动态存储分配,赋值合并为下 int *y = new int; *y = 284; //或者 int *y = new int(220);
一维数组:
int *arr = new int[len];
操作符new为len个整形数分配了存储空间,并返回第一个整形数空间的指针。
delete操作符(Important):
动态分配的存储空间不需要时应该要将其释放,否则可能会导致内存泄漏,程序崩溃等许多严重问题。
//释放变量内存 delete y; //释放一维数组内存 delete[] x;
二维数组:
如果数组的列数在编译时也是未知的,那么不可能仅调用一次new就创建这个二维数组(即使数组的行数在编译时是已知的)。要构造这样的二维数组,可以把它看做是由若干行所构成的结构,每一行都是一个能用new来创建的一维数组。指向每一行的指针保存在另一个一维数组之中。
template<class T> bool make2dArray(T ** &arr, int numberOfRows, int numberOfColumns) { //创建一个二维数组 try{ //创建行指针 arr = new T * [numberOfRows]; //为每一行分配空间 for(int i = 0; i < numberOfRows; ++i) { arr[i] = new int [numberOfColumns]; } return true; }catch (bad_alloc) { cerr << "Out of memory" << endl; return false; } }
读者可以借此思考一下,编写一个更具一般性的算法,比如不浪费存储空间的情况下开一个二维数组,该数组的每一行所含元素的个数可能不同。
可以参考我的另一篇博客!
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。