ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

new的用法

2022-01-22 21:02:12  阅读:106  来源: 互联网

标签:10 int 用法 数组 空间 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 

 

原文链接:

c++中,new的用法很灵活,这里进行了简单的总结:_进击的火山博客-CSDN博客

c++中 new的使用方法_计量小菜鸡的博客-CSDN博客_c++new的用法

标签:10,int,用法,数组,空间,new,指针
来源: https://www.cnblogs.com/luyufan/p/15835013.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有