• 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
  • 相关阅读:
    大脑图谱-------
    队列(Queue)的详解
    Vue3+TypeScript+Element Plus前端项目构建入门
    Javaweb对于JDBC事务回滚的实战与原理剖析详解
    CSS基础语法
    python中的accumulate()函数
    Top K 问题解决方案
    MIT-BIH-AF 数据集开发库
    你安全吗?丨虎云系统“后门”
    C++开源网络库casablanca_cppRestSdk入门环境及使用示例
  • 原文地址:https://blog.csdn.net/m0_64407685/article/details/127737235