当前位置: 首页 > news >正文

C语言之内存分配例题详解

1、C中内存分为四个区
  栈:用来存放函数的形参和函数内的局部变量。由编译器分配空间,在函数执行完后由编译器自动释放。 
  堆:用来存放由动态分配函数(如malloc)分配的空间。是由程序员自己手动分配的,并且必须由程序员使用free释放。如果忘记用free释放,会导致所分配的空间一  直占着不放,导致内存泄露。 
  全局:用来存放全局变量和静态变量。存在于程序的整个运行期间,是由编译器分配和释放的。   
例1. 输入一个数组长度,动态创建数组,所有元素随机生成,输出元素中的最大值。

    int n;             //类型定义的都是在栈区
    scanf(
"%d",&n);
    
int a[] = {0};
    
int *p;
    p = a;
    p = malloc(n*
sizeof(int)); //在堆区分配内存(分配方式:数组元素个数*类型字节长度)
    
for (int i = 0; i < n; i++) {
        *(p+i)= arc4random()%
10+1;
    }
    
int max = 0;
    
for (int j = 0; j < n; j++) {
    
if (max < *(p+j)) {
        max = *(p+j);
    }
    }
    
printf("%d\n",max);
    
free
(p);            //最后不要忘了释放内存

例2.  已知一个数组20个元素(随机1到100之间包含1和100),求大于平均数的元素个数,并动态生成一个新数组保存(提示:malloc出20个元素保存)
    
int a[20] = {0};
    
int sum  = 0;
    
for (int i = 0; i < 20; i++) {
        a[i] = 
arc4random()%100+1;  //随机分配20个(1,100)的随机数
        sum = sum + a[i];
          }
    
int b[20];
    
int avg = 0;
    
int *p;
    p = b;
    p = 
malloc(20*sizeof(int));    //在堆区分配内存(分配方式:数组元素个数*类型字节长度)
    avg = sum/
20;
    
int k = 0;
      
for (int j = 0; j < 20; j++) {
          
if (a[j] > avg) {
              *(p+k) = a[j];
              k++;
          }
    }
    
for (int i = 0; i < k; i++) {
        
printf("%d\n",*(p+i));
    }
    
free(p);              //最后不要忘了释放内存

转载于:https://www.cnblogs.com/shushulele/p/3834635.html

相关文章:

  • 收费版APP三年总结(个人经验)
  • [原创]2014年上半年测试书籍推荐
  • VCL 中的 Windows API 函数(6): BeginDeferWindowPos
  • 用T4 Template生成代码
  • YourSQLDba 配置——修改备份路径
  • Asp.NET MVC 技术参考:http://kb.cnblogs.com/zt/mvc/
  • 【算法学习笔记】01.先说点什么吧
  • 更改Zend Studio/Eclipse代码风格主题
  • 06 Locking and Latching
  • 数学图形之球面,椭球面,胶囊体,刺球
  • contentType 'text/xml; charset=UTF-8' conflicts问题
  • Windows Azure创建管理数据库
  • 使用js操作cookie和浏览器关闭时删除指定cookie
  • 解决HTML5中placeholder属性兼容性的JQuery插件
  • C# 集合
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • java取消线程实例
  • jquery cookie
  • Python学习之路16-使用API
  • Vue2 SSR 的优化之旅
  • 初识 webpack
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 前端性能优化--懒加载和预加载
  • 树莓派 - 使用须知
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 推荐一个React的管理后台框架
  • 移动端 h5开发相关内容总结(三)
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • #include
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (力扣)1314.矩阵区域和
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • ******之网络***——物理***
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .Net Redis的秒杀Dome和异步执行
  • .net 受管制代码
  • .Net接口调试与案例
  • .net流程开发平台的一些难点(1)
  • ::前边啥也没有
  • @Autowired多个相同类型bean装配问题
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @ModelAttribute 注解
  • @private @protected @public
  • [ 蓝桥杯Web真题 ]-布局切换
  • []FET-430SIM508 研究日志 11.3.31
  • [20190113]四校联考
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记