C++动态分配
C语言是利用库函数malloc和free来分配和撤销内存空间的;C++同样提供了较简便而功能较强的运算符new和delete来取代malloc和free函数。
在C++中,new和delete是运算符,不是函数,因此执行效率高,为了与C语言兼容,C++仍保留malloc和free函 数,但不建议读者使用malloc和free函数,而是使用new和delete运算符。
new?int;?//开辟一个存放整数的存储空间,返回一个指向该存储空 间的地址
new?int(100)//开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址?
new?char[10];//开辟一个存放字符数组的空间,返回首元素的地址?
new?int[3][4];?//开辟一个存放二维整型数组的空间,返回首元素的地址?
float?*point=new?float(3.1415);//开辟一个存放单精度数的空间,并指定该实数的初值为3.1415,将返回的该空间的地址赋给指针变量point
new运算符使用的一般格式?
new 类型?[初值]
在C++中,用new分配数组空间时不能指定初值,如果由于内存不足导致无法正常分配空间,则new会返回 一个空指针NULL,读者可以根据该指针的值判断分配空间是否成功。
C++在动态分配或撤销空间时,往往将new、delete两个运算符和结构体结合使用。?
经典案例:C++实现开辟空间存放结构体变量。
#include<iostream>//预处理
#include<string>?
using?namespace?std;//命名空间?
struct?Student
{
??int?num;//学号?
??string?name;//姓名?
??char?sex;//性别?
};
int?main()//主函数?
{
??Student * point;//定义结构体指针变量?
??point=new?Student;//用new运算符开辟一个存放Student型数据的空间?
??point->num=10001;//赋值?
??point->name="yan xiao lin";?//赋值?
??point->sex='M';//赋值?
??cout<<point->num<<endl;//输出学号?
??cout<<point->name<<endl;//输出姓名?
??cout<<point->sex<<endl;//输出性别?
??delete?point;//撤销空间?
??return?0;?//函数返回值为0;
}
编译运行结果:
10001
yan xiao lin
M
--------------------------------
Process exited after?2.318?seconds?with?return?value?0
请按任意键继续. . .
更多案例可以go公众号:C语言入门到精通
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。