动态数组是指在声明时,没有确定数组大小的数组,它可以随程序需要而重新指定大小。动态数组的内存空间是从堆动态分配的,当程序执行到我们编写的分配语句时,才为其分配存储空间。
使用动态数组的优点是可以根据用户需要,有效利用存储空间。
int a[10];//静态数组,在堆栈上创建
int n;
//C语言的malloc函数进行书写
int *p = (int *)malloc(n * sizeof(int));
变长数组的实际意思是以变量作为长度的数组
,区别于以常数作为长度的数组
。英文Variable-Length Array
(后续都缩写成VLA),注意这里有一个连接号。
连接号-
代表的意思是,Variable不是一个用于修饰Length的形容词,而是一个名字名词(即变量的意思)。
了解了正确的含义后,不难理解VLA的目的就是数组的长度是由一个变量指定的,而非常数。
总结:
变长数组一般是在栈上分配,动态数组一般是在堆上分配。
变长数组在函数返回之后声明周期就结束了,而动态数组需要手动free掉。
变长数组使用多了容易栈溢出,而且它在c11里只是可选特性,和标准 C++ 也不兼容,所以不建议过多使用。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !