4.7.6  使用 new 来创建动态数组

使用常规数组存储数据时,一般都是在程序编译时就已经为数组分配好了内存。如果存储的数据未达到数组的长度,就会导致很多内存闲置,致使效率较低。
对于处理一些大型数据,我们就可以使用 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],以此类推。

程序清单  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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值