0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

变长数组和动态数组区别

嵌入式应用开发 来源:嵌入式应用开发 作者:嵌入式应用开发 2022-09-28 15:20 次阅读

动态数组是指在声明时,没有确定数组大小的数组,它可以随程序需要而重新指定大小。动态数组的内存空间是从堆动态分配的,当程序执行到我们编写的分配语句时,才为其分配存储空间。

使用动态数组的优点是可以根据用户需要,有效利用存储空间。

inta[10];//静态数组,在堆栈上创建

intn;
//C语言的malloc函数进行书写
int*p=(int*)malloc(n*sizeof(int));

变长数组的实际意思是以变量作为长度的数组,区别于以常数作为长度的数组。英文Variable-Length Array(后续都缩写成VLA),注意这里有一个连接号。

连接号-代表的意思是,Variable不是一个用于修饰Length的形容词,而是一个名字名词(即变量的意思)。

了解了正确的含义后,不难理解VLA的目的就是数组的长度是由一个变量指定的,而非常数。

总结:

变长数组一般是在栈上分配,动态数组一般是在堆上分配。

变长数组在函数返回之后声明周期就结束了,而动态数组需要手动free掉。

变长数组使用多了容易栈溢出,而且它在c11里只是可选特性,和标准 C++ 也不兼容,所以不建议过多使用。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    3882

    浏览量

    61310
  • 动态数组
    +关注

    关注

    0

    文章

    3

    浏览量

    5934
收藏 人收藏

    评论

    相关推荐

    C语言中指针数组数组指针的区别

    指针和数组之间存在着紧密的关系。在本文中,我们将探讨指针和数组的关系、指针算术和数组遍历、多维数组与指针以及指针数组
    发表于 08-17 15:29 280次阅读

    详谈数组和指针的区别与联系

    详谈数组和指针的区别与联系
    的头像 发表于 06-29 15:18 2.2w次阅读
    详谈<b class='flag-5'>数组</b>和指针的<b class='flag-5'>区别</b>与联系

    指针数组数组指针的区别

    这里我们区分两个重要的概念:指针数组数组指针。
    的头像 发表于 06-29 15:30 1.9w次阅读
    指针<b class='flag-5'>数组</b>和<b class='flag-5'>数组</b>指针的<b class='flag-5'>区别</b>

    C语言指针和数组区别

    在C语言教程中我们使用通过数组名通过偏移和指针偏移都可以遍历数组,那么指针和数组到底有什么区别??
    的头像 发表于 07-18 16:29 1553次阅读

    C语言可变长的数据缓存方法有吗

    变长数组的实际意思是以变量作为长度的数组区别于以常数作为长度的数组。英文Variable-Length Array(后续都缩写成VLA),
    发表于 08-07 17:10 517次阅读

    二维数组数组指针以及指针数组

    二维数组数组指针以及指针数组
    的头像 发表于 08-16 09:02 2261次阅读

    unpacked数组和packed数组的主要区别

    unpacked数组和packed数组的主要区别是unpacked数组在物理存储时不能保证连续,而packed数组则能保证在物理上连续存储。
    的头像 发表于 10-18 09:13 1876次阅读

    SystemVerilog动态数组的大小更改展示

    需要使用" new "操作符实例化一个动态数组,使用[]表示。在实例化过程中,会设置动态数组的大小。
    的头像 发表于 10-21 09:43 1116次阅读

    C语言中的数组空间动态开辟

    C语言中的数组空间动态开辟 在C语言中,必不可少的需要使用到数组,通常为了动态的开辟数组空间,可以使用 malloc 函数,在C++中可以使
    的头像 发表于 02-10 12:42 1558次阅读

    C语言二维数组的定义

    按以上定义,数组a课用的下标范围为0~2,“列下标”的范围为0~3,。用a[3][4]表示元素显然超过了数组的范围。 读者要严格区分在定义数组时用的a[3][4]和引用元素时的a[3][4]的
    的头像 发表于 03-09 11:38 1736次阅读

    动态数组和C++ std::vector详解

    std::vector是C++的默认动态数组,其与array最大的区别在于vector的数组动态的,即其大小可以在运行时更改。std::v
    的头像 发表于 07-19 11:07 716次阅读

    零长数组如何使用定长包定义数据缓冲区

    长度可以为0 ,这是GNU对C语言的扩展。 先对零长数组做个介绍: 零长数组 :也叫 柔性数组(变长数组) : 用途 : 长度为0的
    的头像 发表于 09-27 14:58 455次阅读

    数组的定义 什么是数组

    数组 数组是内置类型,是一组同类型数据的集合,它是值类型,通过从0开始的下标索引访问元素值。 在初始化后长度是固定的,无法修改其长度。当作为方法的参数传入时将复制一份数组而不是引用同一指针。
    的头像 发表于 10-09 09:39 1347次阅读

    字符数组和字符串有没有区别

    字符数组和字符串有没有区别
    的头像 发表于 11-30 16:39 334次阅读

    数组和链表有何区别

    数组和链表的区别,这个问题,不仅面试中经常遇到,考研的同学也得掌握才行。
    的头像 发表于 02-19 15:33 176次阅读
    <b class='flag-5'>数组</b>和链表有何<b class='flag-5'>区别</b>