动态数组

来源:互联网 发布:mac iphoto 照片 编辑:程序博客网 时间:2024/04/30 08:30

 以下内容是转的 ,但是究竟是转自谁的,我也不是很清楚了,但是是在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

对于所有的类类型元素的数组,则无论是否使用(),都会自动调用其默认构造函数来初始化