c++学习之动态存储空间分配
动态分配
无法在编译时分配空间,只能在程序运行时分配空间。
new:用于分配空间,它的返回值是一个指针,指向所分配的空间
delete:用于释放空间
对整数进行动态空间分配:
//1.声明一个整形指针
int *y;
//2.为这个整数动态分配存储空间
//操作符new分配了一块能够存储一个整数的空间,并将该空间的指针赋给y;y是对整数指针
//的引用,*y是对整数本身的引用。
y = new int;
//3.在动态分配的存储空间中存一个整数
*y = 10;
//其它形式
//one
int *y = new int(10);
//two
int *y = new int;
*y = 10;
//three
int *y;
y = new int(10);
对一维数组进行动态空间分配:
int *x = new int[n];
释放空间
delete y;
delete []x;
二维数组动态存储空间分配实例
/*
为二维数组动态分配存储空间
*/
#include <iostream>
using namespace std;
#include <string>
//空间分配
template <class T>
bool make2dArray(T** &x, int rows, int cols)
{
//创建行指针
x = new T* [rows];
//为每一行分配空间
for(int i=0; i<cols; i++){
x[i] = new T[cols];
}
}
//空间释放
template <class T>
void delete2dArray(T** &x, int row){
for(int i=0; i<row; i++){
delete [] x[i];
}
delete [] x;
x = NULL;
}
//测试
int main(){
char** str;
make2dArray(str, 2, 5);
for(int i=0; i<2; i++){
for(int j=0; j<5; j++){
str[i][j] = 'x';
}
}
for(int i=0; i<2; i++){
for(int j=0; j<5; j++){
cout <<str[i][j];
}
cout <<endl;
}
delete2dArray(str, 2);
return 0;
}