数组是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