以下内容是转的 ,但是究竟是转自谁的,我也不是很清楚了,但是是在csdn上的,我无意在百度空间看到了这篇,这篇论文那个作者没写出处。我加了一些截图,供以后看着舒服。
动态数组的定义:
int *pia=new int[10];//array of 10 uninitialized ints 10个没有经过初始化的整形。
此new表达式分配了一个含有10个int型元素的数组,并返回指向该数组第一个元素的指针。此返回值初始化了指针pia。
在自由存储区中创建的数组对象是没有名字的,只能通过其地址间接地访问堆中的对象。
Attention: C++使用new 和 delete在堆(自由存储区)上分配和释放动态数组。
动态数组初始化:
1. 元素只能初始化为元素类型的默认值,而不能像数组变量一样,用初始化列表为元素提供各不相同的值。
要么是初始化为一样的值,要么就不初始化。
2. 对于内置数据类型元素的数组(例如:int char float),必须使用()来显示指定程序执行初始化操作,否则程序不执行初始化操作。
例如:
int *pia=new int[10];//每个元素没有初始化
int *pia2=new int[10]();//每个元素被初始化为0
3 类类型元素的数组,则无论是否使用(),都会自动调用其默认构造函数来初始化:
ex:
string *psa=new string[10];//每个元素调用默认构造函数初始化。
string *psa=new string[10]();//每个元素调用其默认构造函数进行初始化。
4 动态分配空数组
例如:
char *cp=new char[0];//申请一个空数组
5 动态释放
delete[] pia;
6 典型使用示例:
const char* pc="a very long literal string";//处理C风格字符串时候使用const指针
const size_t len=strlen(pc)+1;//size_t 用于数组的大小和下标
for(size_t ix=0;ix!=1000000;++ix)
{
char* pc2=new char[len];//pc2 指向的存储空间的内容会动态改变,因此不使用const
strncpy(pc2,pc,len);//strncpy 比使用 strcpy更加安全
//do something
delete[] pc2;
}
图1
如图一:所有的数组元素都被初始化为0了。
图2
所有的数组元素都是一个随机数。
图3
对于所有的类类型元素的数组,则无论是否使用(),都会自动调用其默认构造函数来初始化