大家好,又见面了,我是你们的朋友全栈君。
用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:\图片.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)
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/146214.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...