new的用法
一、new创建
new运算符使用的一般格式为:
new 类型 (初值) /new 类型 [大小]
new动态创建二维数组的格式一般是这样:
T (*p)[N] = new T [][N]
其中,T是某种类型,N是二维数组的列数。采用这种格式,列数必须指出,而行数无需指定。在这里,p的类型是TYPE*[N],即是指向一个有N列元素数组的指针。
注意:
new创建对象需要指针接收,一处初始化,多处使用
new创建对象使用完需delete销毁
new创建对象直接使用堆空间,而局部不用new定义对象则使用栈空间
new对象指针用途广泛,比如作为函数返回值、函数参数等
频繁调用场合并不适合new,就像new申请和释放内存一样。
用new分配数组空间时不能指定初值。
如果由于内存不足等原因而无法正常分配空间,则new会返回一个空指针NULL,用户可以根据该指针的值判断分配空间是否成功。
详细解说:
1. new( ) 分配这种类型的一个大小的内存空间,并以括号中的值来初始化这个变量;
2. new[ ] 分配这种类型的n个大小的内存空间,并用默认构造函数来初始化这些变量;
new int;//开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针) new int(100);//开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址 new char[10];//开辟一个存放字符数组(包括10个元素)的空间,返回首元素的地址 new int[5][4];//开辟一个存放二维整型数组(大小为5*4)的空间,返回首元素的地址 float *p=new float (3.14159);//开辟一个存放单精度数的空间,并指定该实数的初值为//3.14159,将返回的该空间的地址赋给指针变量p
3. 当使用new运算符定义一个多维数组变量或数组对象时,它产生一个指向数组第一个元素的指针,返回的类型保持了除最左边维数外的所有维数。
例如:
int *p1 = new int[10];//返回的是一个指向int的指针int* int (*p2)[10] = new int[2][10];//new了一个二维数组, 去掉最左边那一维[2], 剩下int[10], 所以返回的是一个指向int[10]这种一维数组的指针int (*)[10]. int (*p3)[2][10] = new int[5][2][10]; //new了一个三维数组, 去掉最左边那一维[5], 还有int[2][10], 所以返回的是一个指向二维数组int[2][10]这种类型的指针int (*)[2][10].
二、空间释放
delete运算符使用的一般格式为:
delete [ ] 指针变量 /delete 指针变量
其中在指针变量前面加一对方括号,表示是对数组空间的操作
例如
delete p;//要撤销类似float *p=new float (3.14159)开辟的空间
delete [] pt;//在指针变量前面加一对方括号,表示是对数组空间的操作
三、例 开辟空间以存放一个结构体变量。
#include <iostream> #include <string> using namespace std; struct Student //声明结构体类型Student { string name; int num; char sex; }; int main( ) { Student *p; //定义指向结构体类型Student的数据的指针变量 p=new Student; //用new运算符开辟一个存放Student型数据的空间 p->name=″Wang Fun″; //向结构体变量的成员赋值 p->num=10123; p->sex='m'; cout<<p->name<<endl<<p->num<<endl<<p->sex<<endl;//输出各成员的值 delete p;//撤销该空间 return 0; } 运行结果为 Wang Fun 10123 m
原文链接:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!