• C语言-动态内存分配


    传统数组的缺点

    数组的长度必须事先进行指定,且只能是常整数,不能够是变量
    例如

    1. int a[5]; //这是正确的
    2. int len;
    3. int a[len]; //这是错误的。传统的数组不能够是变量

    传统形式定义的数组。该数组在内存中的空间,程序员无法手动进行释放。在一个函数运行期间,系统为该函数中数组分配的空间会一直存在,直到该函数运行结束时,该数组的空间才会被系 统释放。
    例如

    1. #include
    2. void f(void)
    3. {
    4. int a[4]={1,2,3,4};
    5. return;
    6. }
    7. int main(void)
    8. {
    9. f();
    10. return 0;
    11. }
    12. //数组 a 在内存中的空间会一直存在 ,直到函数 f 执行完成,系统才会释放内存中数组的空间。

    数组的长度一旦定义就不能够进行更改
    数组的长度不能在函数的运行过程中,动态的扩充或者缩小

    A函数定义的数组,在A函数运行期间可以被其他函数进行使用。在A函数终止后,A函数中的数组就不能够被其他函数进行使用
    例如:

    1. #include
    2. void g(int* parr,int len)
    3. {
    4. parr[3]=88;
    5. }
    6. void f(void)
    7. {
    8. int a[4]={1,2,3,4};
    9. g(a,4);
    10. printf("a[3]=%d\n",a[3]);
    11. }
    12. int main(void)
    13. {
    14. f();
    15. return 0;
    16. }
    17. /*
    18. 上面程序就说明了,一旦 f 函数终止了,g 函数中调用的 f 函数中数组 a 就会失败,
    19. */


    总结一下就是:
    传统函数定义的数组不能够跨函数使用。


    为什么需要动态分配内存

    动态数组很好的解决了传统数据的缺陷。

    传统数组也叫静态数组。


    动态内存分配举例——动态数组的构造

    1. 首先我们来讲讲malloc函数

    malloc函数是 memory(内存) allocate(分配)的缩写。也就是内存分配函数。

    举个例子

     #include
  • 相关阅读:
    25、四大函数式接口(消费型接口(Consumer)和供给型接口(Supplier))
    Theme Studio(主题工作室)
    redis集群节点间的内部通信机制
    AIGC如何助力产品研发的创新和性能提升
    【SSM】Spring Day 1
    Cookies 完全指南
    Python的第三方日志库Loguru
    MySQL索引优化,设计原则 及 trace 详解(思维导图)
    Spring整合Mybatis
    python数据分析绘图
  • 原文地址:https://blog.csdn.net/m0_64407685/article/details/127737235