• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
BeyondTechnology
博客园    首页    新随笔    联系   管理    订阅  订阅

创建动态数组

1、初始化动态分配的数组

如果数组元素具有类型,将使用该类的默认构造函数初始化,如果是内置类型,则无初始化:

string *psa = new string[10];    //array of 10 empty strings

int *pia = new int[10];        //array of 10 uninitialized ints

也可以使用跟在数组长度后面的一对空圆括号,对数组元素作值初始化

int *pia2 = new int[10]();      //array of 10 uninitialized ints

圆括号要求编译器对数组做值初始化,此处把数组元素都设置为0

2、const对象的动态数组

在堆中创建的数组存储内置类型的const对象,必须为这个数组提供初始化:因为数组元素都是const对象,无法赋值,唯一方法就是对数组做值初始化:

//error:uninitialized const array

const int *pci_bad = new const int[100];

//ok:value-pci_ok = new const int[100]();

C++允许定义类类型的const数组,但该类类型必须提供默认构造函数。

以创建的常量元素不允许修改——因此这样的数组实际上用处不大。

3、允许动态分配空数组

C++虽然不允许定义长度为0的数组变量,但是明确指出,调用new动态创建长度为0的数组时合法的

char arr[0];      //error:cannot define zero-length array

char *cp = new char[0];      //ok:but cp can't be dereferenced

用new动态创建长度为0的数组时,new返回有效地非零指针。该指针与new返回的其他指针不同,不能进行解引用操作,因为它毕竟没有指向任何元素。允许的操作:比较运算;在该指针上加(减)0;或者减去本身,得0;

posted @ 2010-09-29 01:35  BeyondTechnology  阅读(940)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3