【C++基础编程】#018 数组初始化:int a[10] 和 int *a = new int[10]区别

数组是C++中最常见的数据结构之一。

一般来说,有两种方法初始化一个数组(假设数组长度为10):

int a[10];
int *a = new int[10];

下面简单介绍一下这两种方法的区别:


区别一
  • 前者系统会在工作栈中分配空间,系统会自动实现内存的分配和回收。
  • 后者系统会在工作堆中分配空间,系统一般不会自动实现内存的回收,如果数组a使用完毕,需要delete[] a来删除数组a占的内存空间,否则可能会造成内存泄露。

区别二
  • 前者数组长度一般在编译时就固定了,若int a[10],则数组长度固定为10
  • 后者数组长度是动态分配的,就是说可以在运行的时候给出长度

举例:
cin >>length;
int *a = new int[length];
每次运行都可以控制数组的长度,即所谓动态分配。

区别三

若要构建的数组特别大,比如a[1000000]则一般用第二种方式初始化数组。
因为栈的实际内存是连续内存,因此可分配空间较小,堆可以是非连续内存,因此可以分配较大内存。

部分参考:
https://zhidao.baidu.com/question/312441671.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值