指针常与堆(heap)空间的分配有关。堆就是指一块内存区域,它允许程序在运行时以指针的方式从其中申请一定数量的存储单元(其他存储空间的分配是在编译时完成的),用于数据的处理。堆内存也称为动态内存。
C语言的方法:
1. #include <stdlib.h>
2. int *p= (int *) malloc(sizeof(int));
3 ....
4. free(p);
c++的方法:
new的功能类似于malloc,用于从堆内存中分配指定大小的内存区域,并返回获得内存区域的首地址。如果分配不成功,就返回空指针,故可以此作为判断内存分配成功与否的标志。
int *a=new int(120);
申请一个整形变量空间,赋初值为120,并定义一个整形指针a指向改地址空间。
int *a=new int(n);
申请一个整型变量空间,赋初值为n,并定义一个整型指针a指向该地址空间。
delete a;
用于释放单个指针变量。
int *a=new int[5];
创建int型指针,并指向长度为4*sizeof(int)的一段内存
注意:不能初始化;
释放方式:delete [ ]a;
注意:这个 [ ] 不能去掉,如果去掉了就会只释放a[0]所占的空间,a[1]到a[4]不会被释放,产生内存泄露。
p = new type[n];
// 分配具有n个元素的数组
动态二维数组申请空间:
int **p = new int* [5];
for(int i=0;i <5;i++)
p[i] = new int[10];
释放空间:
for(int i=0; i <5; ++i)
delete []p[i];
delete []p;
最后总结:
C++方法优势
1、new能够自动计算要分配的内存大小,不必用sizeof计算要分配的内存的字节数,减少了出错的可能性。
2、new不需要进行类型转换,能够自动返回正确的指针类型。
3、new可以对分配的内存进行初始化。
4、new和delete可以被重载,借此扩展new和delete的功能,建立自定义的存储分配系统。