用new创建数组

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

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

用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,可根据一下代码证明:

#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:会的

可以以下代码证明

#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;

return 0;

}


代码执行结果

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


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • zookeeper使用场景及示例_与Zookeeper类似的框架

    zookeeper使用场景及示例_与Zookeeper类似的框架源码:https://gitee.com/suwenguang/testzookeeper集群角色:leader主follower从observer观察者:不参与写的选举,但是提供读概念:数据模型zookeeper的数据模型和文件系统类似,每一个节点称为:znode.是zookeeper中的最小数据单元。每一个znode上都可以保存数据和挂载子…

    2022年10月3日
    6
  • python大数据分析实例-用Python整合的大数据分析实例

    python大数据分析实例-用Python整合的大数据分析实例用Python进行数据分析的好处是,它的数据分析库目前已经很全面了,有NumPy、pandas、SciPy、scikit-learn、StatsModels,还有深度学习、神经网络的各类包。基本上能满足大部分的企业应用。用Python的好处是从数据抽取、数据收集整理、数据分析挖掘、数据展示,都可以在同一种Python里实现,避免了开发程序的切换。这里就和大家分享我做的一个应用实例。解决问题:自动进…

    2022年5月29日
    47
  • Python字符串转换为日期时间– strptime()「建议收藏」

    Python字符串转换为日期时间– strptime()「建议收藏」Wecanconvertastringtodatetimeusingstrptime()function.Thisfunctionisavailableindatetimeandtimemodulestoparseastringtodatetimeandtimeobjectsrespectively.我们可以使用strptime()函数将字…

    2022年6月2日
    106
  • viewstate解密

    viewstate解密看完之后,觉得能不用viewstate就不用,再者像这样viewstate[“a”]=”b”;这种简单的赋值是没有什么关系的,它生成的树是很小的,altas一定是用js修改了viewstate的,但方法肯定是加密再加密的,效率也应该很低. ViewState是.Net中提出的状态保存的一种新途径(实际上也是老瓶装新酒);我们知道,传统的Web程序保存状态的方式有这样几种: 1、Appli

    2022年7月21日
    25
  • SpringCloud、Istio比较

    对比项 SpringCloud Istio AutoScaling&selfhealing HealthIndicator PoolEjection Deployment&Scheduing 无 Deploymentstrategy,DarkLaunch,A/B,cannary Resilience&Fault…

    2022年4月15日
    267
  • 如何写一篇可实施的技术方案?

    如何写一篇可实施的技术方案?为何要写这篇博文?一个错误的方案设计重点是什么?拿模板说说总结

    2022年5月11日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号