动态联编和静态联编:静态是一开始就决定了变量的大小,无论如何都不变(始终占用着内存);动态是在运行时决定是否创建这个变量,以及变量的大小(节省了内存)。
动态数组就是动态联编出来的。
①动态数组的创建:typename * pointername = new typename [元素数];
这个时候new返回的是第一个元素的地址,这个地址被赋给了指针。
释放内存时,由于new后用了方括号,delete后也应该用方括号。
示例: int * tp = new int [18];
......
delete [ ] tp;
②动态数组的使用
#include <iostream>
int main()
{
using namespace std;
int * py = new int [4];
py [0] = 1;
py [1] = 2;
py [2] = 3;
py [3] = 9;
cout<<'py [2] is '<<py [2] <<'.\n';
py = py + 1;//此时指针指向了第二个元素
cout<<'Now the py[1] is'<<py[1]<<'.\n';
cout<<'py[2] is '<<py[2]<<'.\n';
py = py - 1;//使指针指向原来的地址,才可以删除
delete [] py;
return 0;
}
使用动态数组时,要用哪个元素直接写就可以。其他注意事项在注释里。
③new和delete的使用总结
1.delete只能释放用new分配的内存;
2.已经释放了的内存块不能再用delete;
3.用了new[]就要用delete [];
4.用了不带方括号的new就用不带方括号delete;
5.可以对空指针用delete。(话说对空指针用delete有什么用呢?求解答)