总结一一下动态内存的笔记:
为什么要用动态内存?
1、有时候创建的变量是无法在写程序时得知的,需要根据不同的输入情况开辟空间,由此引入大小可以灵活变化的动态内存。
2、直接创建的变量是放在栈中的,而动态内存是放在堆中的。直接创建变量是连续的,课存放空间小;动态内存创建的变量逻辑上连续,空间上不连续,可存放空间大。
3、直接创建的变量可以自动释放内存空间,但是动态内存需要主动释放。
动态内存的建立和释放:
Type* name=new Type;
//单个变量的建立
delete name
Type* name=new Type[n];
//建立一个有n个Type数据类型空间大小的数组,name代表数组首元素地址,通过*(name+i)访问元素
delete[] name;
//[]代表从第一个变量开始释放
Type** name=new Type*[n];
for (int i = 0; i < n; i++)
name[i] = new int[m];
//先建立一个指针数组,其中的每个变量都是一个指针,然后在将每一个指针都动态分配一个数组,
指针作为数组首元素的地址,整个二维数组的大小为n*m
for (int i = 0; i < n; i++)
delete[] name[i];
delete[] name;
//二维的数组先将建立的n个数组释放,再释放由n个地址组成的数组
行指针的动态分配二维数组:
int main()
{
int (*p)[20];//先创建一个指向大小为20的int数组的指针
int n;
cin>>n;//输入n;
p=new int[n][20];//分配空间
for(int i=0;i<n;i++)
for(int j=0;j<20;j++)
cin>>p[i][j];
//输入
delete[] p
//虽然是二维数组,但本质上只建立了一次动态数组,所以只用释放一次内存
}