用new创建数组

用new创建数组,第1张

用new创建数组 用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
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
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://outofmemory.cn/zaji/5690971.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存