4.7.6  使用 new 来创建动态数组
2015-06-07 23:19
204 查看
使用常规数组存储数据时,一般都是在程序编译时就已经为数组分配好了内存。如果存储的数据未达到数组的长度,就会导致很多内存闲置,致使效率较低。
对于处理一些大型数据,我们就可以使用 new 进行动态内存分配。常规通过声明来创建数组,则在程序被编译时就已经为它分配好了内存空间,不管程序最终是否使用数组,数组都在那里,它占用了内存。但使用 new 时,可以在运行阶段判断是否使用数组以及使用数组需要的长度。这种在运行时为数组分配内存方式称为动态联编。而这种在程序运行时创建的数组被称为动态数组。
一、使用 new 创建动态数组
只需将数组的元素类型和元素的数目信息告诉 new 即可。
语法规则:
注释: pointerType 指针类型;pointerName 指针名; arrayType 数组元素类型; Asize 数组元素的数目(既可以是变量也可以是常量)
例如:创建一个包含10个int元素的动态数组: int * psome = new int [10];
说明:new 运算符返回的是第一个元素的地址。在该例子中,这个地址被赋值给 psome。
二、使用 delete 释放动态数组内存
当程序使用完 new 创建的内存后需要使用 delete 对内存进行释放。
语法规则:
说明: [ ] 方括号不能省略,它表明释放的是整个数组。
三、使用 new 和 delete 时,应遵循的规则:
①不要使用delete来释放不是new分配的内存。
②不要使用delete释放同一个内存两次甚至多次。
③如果使用new[ ]为数组分配内存,则应该使用delete[ ]来释放。
④如果new为一个实体分配内存,则应使用delete(没有方括号)来释放。
⑤对空指针应用delete是安全的。
四、 为数组分配内存的通用格式:
五、使用动态数组
因为C++内部是使用指针来处理数组的。因此数组和指针基本上是等价的。就可以把指针当作数组名使用。例如,对于第一个元素就是 psome[0];对于第二个元素就是psome[1],以此类推。
程序输出示例:
regard p3 as a array, we can use a value of array:
p3[1] is 0.5
regard p3 as a array, we can use total:
p3[0]+p3[1]+p3[2]=1.5
actually,p3 is a pointer!
increment the pointer.
p3[0] is 0.5
p3[1] is 0.8
point back to beginning.
free the memory!
Program ended with exit code: 0
对于处理一些大型数据,我们就可以使用 new 进行动态内存分配。常规通过声明来创建数组,则在程序被编译时就已经为它分配好了内存空间,不管程序最终是否使用数组,数组都在那里,它占用了内存。但使用 new 时,可以在运行阶段判断是否使用数组以及使用数组需要的长度。这种在运行时为数组分配内存方式称为动态联编。而这种在程序运行时创建的数组被称为动态数组。
一、使用 new 创建动态数组
只需将数组的元素类型和元素的数目信息告诉 new 即可。
语法规则:
pointerType * pointerName = new arrayType [Asize];
注释: pointerType 指针类型;pointerName 指针名; arrayType 数组元素类型; Asize 数组元素的数目(既可以是变量也可以是常量)
例如:创建一个包含10个int元素的动态数组: int * psome = new int [10];
说明:new 运算符返回的是第一个元素的地址。在该例子中,这个地址被赋值给 psome。
二、使用 delete 释放动态数组内存
当程序使用完 new 创建的内存后需要使用 delete 对内存进行释放。
语法规则:
delete [] pointerName;
说明: [ ] 方括号不能省略,它表明释放的是整个数组。
三、使用 new 和 delete 时,应遵循的规则:
①不要使用delete来释放不是new分配的内存。
②不要使用delete释放同一个内存两次甚至多次。
③如果使用new[ ]为数组分配内存,则应该使用delete[ ]来释放。
④如果new为一个实体分配内存,则应使用delete(没有方括号)来释放。
⑤对空指针应用delete是安全的。
四、 为数组分配内存的通用格式:
type_name * pointer_name = new type_name [num_elements];
五、使用动态数组
因为C++内部是使用指针来处理数组的。因此数组和指针基本上是等价的。就可以把指针当作数组名使用。例如,对于第一个元素就是 psome[0];对于第二个元素就是psome[1],以此类推。
[code]程序清单 4.18 arraynew.cpp // // main.cpp // first // // Created by 刘伟 on 15/5/30. // Copyright (c) 2015年 刘伟. All rights reserved. //C++ primer plus //程序清单4.18 arraynew.cpp //arraynew.cpp -- using the new operator for arrays #include<iostream> using namespace std; int main() { double *p3 = new double [3]; // space for 3 doubles p3[0] = 0.2; // treat p3 like an array name p3[1] = 0.5; p3[2] = 0.8; cout << "regard p3 as a array, we can use a value of array:" << endl; cout << "p3[1] is " << p3[1] << endl; cout << "regard p3 as a array, we can use total:" << endl; cout << "p3[0]+p3[1]+p3[2]="<<p3[0]+p3[1]+p3[2]<< endl; cout << "actually,p3 is a pointer!"<< endl; cout << "increment the pointer."<< endl; p3 = p3 + 1; // 指针和数组的区别:不能修改数组的值,但是指针是变量,因此可以修改它的值. cout << "p3[0] is " << p3[0] << endl; cout << "p3[1] is " << p3[1] << endl; cout << "point back to beginning."<< endl; p3 = p3 - 1; cout << "free the memory!"<< endl; delete [] p3; return 0; }
程序输出示例:
regard p3 as a array, we can use a value of array:
p3[1] is 0.5
regard p3 as a array, we can use total:
p3[0]+p3[1]+p3[2]=1.5
actually,p3 is a pointer!
increment the pointer.
p3[0] is 0.5
p3[1] is 0.8
point back to beginning.
free the memory!
Program ended with exit code: 0
相关文章推荐
- BZOJ246 [中山市选2009]谁能赢呢?(讨论奇偶性)
- 图书管理系统类图
- php 正则表达式使用
- 数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器
- 进程间通信方式
- HDU 5264 pog loves szh I (字符串,水)
- nginx-tomcat负载均衡redis-session共享,静态资源分离
- Android 开发中常用的Animation
- [设计模式]_[观察者模式在窗口之间消息传递的使用例子]
- IQ测试结果
- RBAC权限管理2
- ZOJ 1364 POJ 1325 -Machine Schedule
- 将一张JPEG图片通过嵌入式linux的帧缓冲机制绘制到7寸触摸屏上
- 小圆贴大圆内侧滚动,求小圆上指定一点的运动轨迹
- spring MVC拦截器01
- RBAC权限管理1
- SQL Network Interfaces, error: 50 - 发生了 Local Database Runtime 错误。无法创建自动实例。
- with as 和group by 代替 count distinct,提高性能
- 给出设计类图
- 第二部分 类型和运算