C++中new和delete来创建和释放动态数组
在C++编程中,使用new创建数组然后用delete来释放。
一、创建并释放一维数组
#include<iostream>
using namespace std;
int main()
{int n;cin>>n;//分配动态一维数组 int *arr=new int[n];for(int i=0;i<n;i++)cin>>arr[i];for(int i=0;i<n;i++)cout<<arr[i]<<" ";//释放arr数组 delete[] arr;return 0;
}
注意:delete后面的[]不能少。
二、创建并释放二维数组
#include<iostream>
using namespace std;
int main()
{int row,col;cin>>row>>col;//为行指针分配空间 int **arr=new int *[row]; for(int i=0;i<row;i++)arr[i]= new int[col];//为每行分配空间(每行中有col个元素) //输入二维数组的数 for(int i=0;i<row;i++)for(int j=0;j<col;j++) cin>>arr[i][j];cout<<"*******************"<<endl;//输出二维数组中的数 for(int i=0;i<row;i++){for(int j=0;j<col;j++) cout<<arr[i][j]<<" ";cout<<endl;} //释放二维数组(反过来) for(int i=0;i<row;i++)delete[] arr[i]; delete[] arr;return 0;
}
三、new创建类
”new”是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘
。
new的过程
当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:1、获得一块内存空间 2、调用构造函
数 3、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。假如我们定义了如
下一个类A:
class A
{
int i;
public:
A(int _i) :i(_i*_i) {}
void Say() { printf("i=%dn", i); }
};
//调用new:
A* pa = new A(3);
那么上述动态创建一个对象的过程大致相当于以下三句话(只是大致上):
A* pa = (A*)malloc(sizeof(A));
pa->A::A(3);
return pa;
虽然从效果上看,这三句话也得到了一个有效的指向堆上的A对象的指针pa,但区别在于,当malloc失
败时,它不会调用分配内存失败处理程序new_handler,而使用new的话会的。因此我们还是要尽可能的使用
new,除非有一些特殊的需求。
C++中new和delete来创建和释放动态数组相关推荐
- C++中使用模板,new创建2维动态数组
1 // 使用模板和new创建2维动态数组 2 3 #include<iostream> 4 #include<exception> 5 #include<cstdlib ...
- C专家编程 第10章 再论指针 10.7 使用指针创建和使用动态数组
使用指针创建和使用动态数组 当预先并不知道数据的长度时,可以使用动态数组.绝大多数具有数组的编程语言都能够在运行时设置数组的长度.它们允许程序员计算需要处理的元素的数目,然后创建一个刚好能容纳 ...
- C++中的开辟/释放动态空间new/delete
在C语言中用于开辟/释放动态空间的关键词是malloc/free,该种开辟空间的方法在C++中,也适用,但除此之外C++还提供了另外一种开辟/释放动态空间的关键词new/delete.对于用mallo ...
- CPP第四版第四章:创建动态数组
数组类型的变量有三个重要限制: 数组长度固定不变 在编译时必须知道其长度 数组只在定义它的块语句内存在 每一个程序在执行时都占用一块可用的内存空 ...
- 第二章 Caché JSON 创建和修改动态实体
文章目录 第二章 Caché JSON 创建和修改动态实体 使用JSON文字构造器 使用动态表达式和点语法 使用点语法创建动态对象属性 使用点语法创建动态数组元素 使用 %Set(), %Get(), ...
- ca32a_demo_c++创建动态数组
/* ca32a_demo_c++创建动态数组20200127 静态是在堆栈上创建的,动态实在堆(heap)上创建的 堆(heap)-自由存储区(free store)-内存的一个区域 c语言:mal ...
- C语言——动态数组的创建和使用
C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...
- python 数组 动态赋值_动态数组在Python中的实现
动态数组 在python中,列表,集合和字典是可变对象.数字,字符串和元组是不可变的对象.可变对象意味着我们从列表,集合或字典中添加/删除项目,但是对于不可变对象(例如元组或字符串)而言,情况并非如此 ...
- VBS 脚本中的字典、动态数组、队列和堆栈
2019独角兽企业重金招聘Python工程师标准>>> 今天用VBS脚本写了几个程序,用到了字典(Dictionary).动态数组(ArrayList).队列(Queue)和堆栈(S ...
最新文章
- XamarinSQLite教程添加测试数据
- WebPart(汇总)[转载]
- html在线随机抽取,利用纯html+javascript实现随机抽取显示
- 分块矩阵在秩不等式中的应用
- 按钮交互loading ---- 转圈圈 加载
- binlog日志_mysql的binlog日志的自动定时清理
- hud抬头显示器哪个好_显示器TN、IPS、VA面板类型哪个好?
- mysql 绿色安装 ubuntu_Ubuntu免安装配置MySQL
- 解决WebGL加载倾斜摄影模型出现An eror occurred while rendering.Rendering has stopped.问题
- 有关C++11标准的一些粗浅认识
- 珠海空号检测的运行原理
- oracle修改执行计划,调整执行计划的三种方法
- 三角形外接球万能公式_【光速解题】如何秒定各类外接球的球心
- 德州停电悲剧不会重演 智慧用电是新方向
- “拷打”两天,扎克伯格胜利大逃亡!
- 万字用户画像标签体系建设分析指南!
- 机器学习中的数学(上)
- c语言编程基础之IPC共享内存
- 在线引流工具Tcpcopy原理、使用、采坑
- 数字逻辑基础:数制与码制之计数进位制
热门文章
- Java实现简单的在聊天面板中显示emoji
- Latex文本文档的排版
- 读EasyPR开发详解实践感想1
- Eratosthenes筛法求素数
- mysql数据倾斜_sqoop数据倾斜解决实战
- layui select第一次无法选中_Windows 10 无法访问共享的解决办法大全
- mysql in和or扫描全表_MySQL对OR条件查询不支持优化,会进行全表扫描
- jsp dbbean mysql_Servlet+JSP+MySQL实现用户管理模块之二、实现用户注册
- jQuery end()函数示例
- java设计模式迭代器模式_Java中的迭代器设计模式