C++中的动态内存分配
C++通过new关键字进行动态内存申请(C语言使用malloc函数)
C++的动态内存申请是基于类型进行的
delete关键字用于内存释放(C语言使用free函数)
变量申请
语法:
cpp
Type* pointer = new Type;
delete pointer;
程序实例1:变量申请
cpp
#include<stdio.h>
int main()
{
int* p = new int; //在堆空间申请一个int类型的变量,指针p指向该变量
*p = 5;
*p = *p + 10;
printf("p = %p\n", p);
printf("p = %d\n", *p);
delete p; //释放堆空间
return 0;
}
输出结果:
cpp
p = 00CF4CA8
p = 15
数组申请
语法:
cpp
Type* pointer = new Type[N];
delete[] pointer;
程序实例2:数组申请
cpp
#include<stdio.h>
int main()
{
int* p = new int[10]; //指向一片堆空间,数组空间不小于40个字节,而不一定是40个字节
for (int i = 0; i < 10; i++)
{
p[i] = i + 1;
printf("p[%d] = %d\n",i,p[i]);
}
delete[] p; //释放堆空间
return 0;
}
输出结果
cpp
p[0] = 1
p[1] = 2
p[2] = 3
p[3] = 4
p[4] = 5
p[5] = 6
p[6] = 7
p[7] = 8
p[8] = 9
p[9] = 10
new关键字与malloc函数的区别
new关键字是C++的一部分;
malloc是由C库提供的函数;
new以具体类型为单位进行内存分配;
malloc以字节为单位进行内存分配;
new在申请单个类型变量时可进行初始化;
malloc不具备内存初始化的特性;
程序实例3:new关键字的初始化
cpp
#include<stdio.h>
int main()
{
int* pi = new int(1); //申请一段内存,int类型,并初始化为1
float* pf = new float(2.0f); //申请一段内存,float类型,并初始化为2.0
char* pc = new char('c'); //申请一段内存,char类型,并初始化为'c'
printf("pi = %d\n",*pi);
printf("pf = %f\n", *pf);
printf("pc = %c\n", *pc);
return 0;
}
输出结果
cpp
pi = 1
pf = 2.000000
pc = c