指针常与堆(heep)空间的分配有关,所谓堆,就是一块内存区域,它允许程序在运行时以指针的方式从其中申请一定数量的存储空间(其他存储空间的分配是在编译时完成的)。堆内存也称动态内存。
c语言的动态内存申请:
#include <stdlib.h>//malloc和free定义在此头文件中
void main() {
int* p;
p = (int*)malloc(sizeof(int));//从堆中分配1个int对象需要的内存并将之转化为int类型
free(p);//释放内存
}
c++动态内存申请:
new的功能类似于malloc(),用于从堆中分配指定大小的内存空间,并返回获得的内存区域的首地址。
delete用于释放内存空间
?? ?type* p = new type;//只分配堆内存 ?? ?type* p = new type(x);//分配到的堆内存并初始化为x ?? ?type* p = new type[n];//分配具有n个元素的数组 ?? ?delete p;//释放动态分配的单个指针变量 ?? ?delete[]p;//释放动态分配的数组存储空间
#include <iostream>
using namespace std;
int main() {
int* p1, * p2, * p3;
p1 = new int;//分配一个能够存放int类型数据的内存区域
p2 = new int(10);//分配一个int类型大小的内存区域,并将10存入其中
p3 = new int[10];//分配一个能够存放十个整数的数组区域。
delete p1;
delete p2;//释放p1、p2指向的内存
delete p3;//错误只释放了p3指向数组的第一个元素
delete []p3;//释放p3指向的数组。
}
|