初始化动态分配的数组问题

34 篇文章 0 订阅

动态分配数组时,如果数组元素具有类类型,将使用该类的默认构造函数实现初始化;如果数组元素是内置类型,则无初始化。
string *psa=new string [10];
int *pia=new int [10];
这两个new表达式都分配了10个对象的数组,第一个数组是string类型,分配了存储对象的空间后,会调用string类型的默认构造函数依次初始化数组中的每个元素。第二个数组为内置类型,分配了存储10个int对象的内从空间,并没 初始化。

可以跟在数组后面加一对空圆括号,对数组元素进行初始化。

int *pia2=new int [10]();

圆括号要求编译器对数组初始化,这里把数组元素都设置为0。//对于这里在VC 6.0下测试,输出为一个很大的负数,VS 2010中输出10个0,对此鸭梨很大。

PS:对于动态分配数组,其元素只能初始化为元素类型的默认值,而不能像数组变量一样,用初始化列表为数组元素提供各不相同的初值。

 

另外C++种允许动态分配空数组

char arr[0];//错

char *cp=new char [0];//正确,但是不能解引用,因为它没指向任何元素。

 

这里补充一点:

const char *str=st2.c_str();//st2 是string类型
c_str返回的数组并不保证一定是有效的,接下来对st2的操作有可能会改变st2的值,使刚才返回的数组失效,如果程序需要持续访问该数据,则应该复制c_str函数返回的数组。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值