一、简单介绍

#include <iostream>
#include <memory>
using namespace std;
int main()
{
//typedef定一个数组的类型
typedef int ptr[109];
//定义一个数组类型的对象
int *p = new ptr;
for(int i = 0; i!= 109; ++i)
p[i] = i;
for(int i = 0; i!= 109;++i)
cout << p[i] << endl;
int n;
cin >> n;
//定义一个数组类型的对象,new + 类型+ [],后面()表示数组的每个元素执行值初始化
int *p1 = new int[n]();
for(int i = 0;i != n;++i)
p1[i] = i;
for(int i = 0; i!=n;++i)
cout << p1[i] << endl;
return 0;
}
二、分配一个数组会得到一个指向数组第一个元素的指针。
由于分配内存返回的不是一个数组类型,因此不能对动态数组调用begin或者end。这些函数的使用维度来返回指向首元素和尾后元素的指针。处于相同的原因,也不能使用范围for语句来处理动态数组中的元素。
三、初始化动态分配对象的数组。
默认情况下,new分配的动态对象,不管是单个分配还是数组中的,都是默认初始化的。可以对数组中元素进行值初始化,方法是在大小之后跟一对空括号。
string *p4 = new string[19]();
//打印元素,发现都是空string
for(auto p = p4;p != p4+19;++p)
cout << *p << endl;
在新标准中,我们还可以提供一个元素初始化器的花括号列表:
int *p5 = new int[20]{1,2,3,4,5,6};
for(int *q = p5;q != p5 + 20;++ q)
cout << *q <<endl;
1
2
3
4
5
6
0
0
0
0
0
0
0
0
0
0
0
0
0
0
int n = get_size();
int *p = new int[n];
for(int q = p;q != p +n; ++q)
下面的语句是合法的。但是定义数组(非动态数组)是非法的。
char arr[0]; //数组不能维度是0
char *cp = new char[0]; //合法的,但cp不能解引用,相当于一个尾后指针。
三、释放动态数组
为了释放动态数组,我们使用一种特殊的形式的delete------在指针前加上一个方括号对:
delete p; //p必须是一个空的方括号对
delete [] p; //p是一个动态数组
如下:
typedef int arrT[42];
int *p = new arrT;
delete [] p;
最后
以上就是繁荣世界最近收集整理的关于c++ 之动态数组简单介绍的全部内容,更多相关c++内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复