前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用new创建数组

用new创建数组

作者头像
全栈程序员站长
发布于 2022-08-28 04:50:12
发布于 2022-08-28 04:50:12
69400
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

用new创建数组

用new创建数组的优势

由于new创建的对象是在运行时确立的,所以有着具体情况具体分析的优点,那么什么叫做具体情况具体分析呢?我觉得c++ primer plus的一个例子十分贴切——比如你在度假,已经做好每天的参观计划,可突然有一天天气不好或你心情不好,此时你就不想参观了,如果此时是在编译状态,系统是不允许的,你必须按照计划去参观,但运行时状态,系统是允许的,此时你就可以呆在酒店尽情的玩耍了。用new创建数组也有此优点,即数组长度可以根据情况而定。

比如说创建10个元素的数组,可以如下代码定义:

int* ptr = new int[10];

但不能写成一下代码:

int* ptr = new int[];

为什么呢?

因为此时如果再new一个动态数组,内存就不好分配了,如果你不知道需要多少元素个数,可以这样写:

int n;

int* ptr = new int[n];

cin >> n;

Q:假如我已经确定要建立7个元素了,但我手欠,少输入了了两个元素,那new会新建7个元素的内存,还是5个

A:会新建7个,而且如果不对这7个元素赋值,其默认的值是0,可根据一下代码证明:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
using namespace std;

int main() {
    int* ptr = new int[7];
    ptr[0] = 1;
    ptr[1] = 2;
    ptr[2] = 3;
    ptr[3] = 4;
    ptr[4] = 5;
    cout << "ptr + 4 = " << ptr + 4 << endl;
    cout << "ptr[5] = " << ptr[5] << endl;
    cout << "ptr + 5 = " << ptr + 5 << endl;
    cout << "ptr[6] = " << ptr[6] << endl;
    cout << "ptr + 6 = " << ptr + 6 << endl;

    delete [] ptr;
    return 0;
}![1](F:\图片\1.PNG)

实现结果如下

Q:假如我又手欠了,多输入了一个元素,如果delete以后,这两个的内存会被释放掉吗

A:会的

可以以下代码证明

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
using namespace std;

int main() {
    int* ptr = new int[2];
    int* ps;
    ps = ptr;
    ptr[0] = 1;
    ptr[1] = 2;
    ptr[2] = 3;
    ptr[3] = 4;
    ptr[4] = 5;
    cout << "释放前:\n";
    ps = ps + 2;
    cout << "addr = " << ps << endl;
    cout << "value = " << *ps << endl;
    
    delete [] ptr;
    cout << "释放后:\n"; 
    
    cout << "addr = " << ps << endl;
    cout << "value = " << *ps << endl;
    
    return 0;
}

代码执行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-afM2IEx9-1640241670545)(F:\图片\2.PNG)]

<< endl;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
return 0;

}

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
代码执行结果

![在这里插入图片描述](https://img-blog.csdnimg.cn/811be136acf5423aa6d998b0dc7e9da5.png#pic_center)

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/146214.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验