【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

你可能感兴趣的:(C++基础编程)