静态数组与动态数组的区别

静态数组 在编译时必须知道其长度即需用常量表达式指定数组长度,数组只在定义它的块语句内存在。

动态数组在运行时动态地分配数组。虽然数组长度是固定的,但动态分配的数组不必在编译时知道其长度,可以(通常也是)在运行时才确定数组长度。与数组变量不同,动态分配的数组将一直存在,直到程序显式释放它为止。

动态数组的初始化:

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] (); 圆括号要求编译器对数组做值初始化,数组元素都将为0.

值得注意的是:允许动态分配空数组:char *cp = new char[0]; // 没有问题,new返回有效的非0指针,因为cp没有指向任何元素,故不能解引用。cp允许的操作包括:比较运算,因此该指针能在循环中使用;允许在该指针上加(减)
0得到本身;或者减去本身,得 0 值。

size_t n = get_size();
int* p = new int[n];
for (int* q = p; q != p + n; ++q)  //如果n=0;则上一步ok,没问题,循环第一次判断失败不会执行循环体。
/* process the array */ ;

但是c++不允许      char arr[0];  //errror

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值