20170507

动态内存分配可以在程序运行的时候随时分配存储位置
动态分配的存储位置一定来自于堆这个段落
堆中的所有存储位置需要使用语句分配和回收
c语言中提供几个标准函数用来分配和回收堆中的存储位置
为了使用这些函数需要包含stdlib.h文件
malloc标准函数用来动态分配多个连续的字节存储位置
malloc把分配后第一个字节的地址赋值给返回值变量
malloc返回值是void*指针,可以转换成任何类型的指针使用
malloc在失败的时候会把NULL赋值给返回值变量
free标准函数用来回收不再使用的动态分配存储位置
释放内存时需要使用第一个字节的地址作为参数
一次分配得到的所有存储位置必须统一释放(不能释放一半留一半)
一段动态分配的内存智能释放一次,释放后记录它的地址的指针将变成野指针
  1 #include <stdio.h>
  2 #include <stdlib.h>
  3
  4 int main() {
  5     int num = 0;
  6     int *p_num = (int *)malloc(3 * sizeof(int));
  7     if(p_num) {
  8         for(num = 0; num <= 2; num++) {
  9             *(p_num + num) = num + 1;
 10         }
 11         for(num = 0; num <= 2; num++) {
 12             printf("三个数依次是%d ", *(p_num + num));
 13         }
 14         printf("\n");
 15         free(p_num);
 16         p_num = NULL;
 17     }
 18     return 0;
 19 }

求中点(动态分配内存)
  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 typedef struct pt {
  4     int x, y;
  5 } pt;
  6 pt *midpt(const pt *p_start, const pt *p_end) {
  7     pt *p_ret = (pt *)malloc(sizeof(pt));
  8     if(p_ret) {
  9         p_ret->x = (p_start->x + p_end->x) / 2;
 10         p_ret->y = (p_start->y + p_end->y) / 2;
 11     }
 12     return p_ret;
 13 }
 14 int main() {
 15     pt start = {}, end = {}, *mid = NULL;
 16     printf("请输入第一个点的位置:");
 17     scanf("%d%d", &start.x, &start.y);
 18     printf("请输入第二个点的位置:");
 19     scanf("%d%d", &end.x, &end.y);
 20     mid = midpt(&start, &end);
 21     if(mid) {
 22         printf("中点(%d, %d)\n", mid->x, mid->y);
 23     }
 24     free(mid);
 25     mid = NULL;
 26     return 0;
 27 }
二级指针形参可以把被调函数动态分配的存储位置交给调用函数使用
这个二级指针形参对应的一级指针存储位置必须由调用函数提供

时间: 2024-10-17 15:46:42

20170507的相关文章

CSDN日报20170507 ——《技能终将过时,而能力与时俱进》

[程序人生]技能终将过时,而能力与时俱进 作者:瞬息之间 程序员所处的这个技术行业,技术的变化很快,已经超过了我们的学习速度.所以程序员们多多少少都有些技能焦虑症,看着新技术此起彼伏,难免不忧虑. 点击阅读全文 [架构]DDD – 领域驱动设计 – 6步成诗法 作者:chunlongyu 本文,试图经由 DDD 把过去软件开发的一序列方法论串起来,最终让大家对 DDD 有一个系统化的认识,而不是纠结于 DDD 的各种细节概念. 点击阅读全文 [机器学习]轻松看懂机器学习十大常用算法 作者:Ali

20170507 作业

1.获取用户信息 请求地址:http://api.nnzhp.cn/getuser 方式:POST/GET 2    获取用户余额 请求地址 http://api.nnzhp.cn/getmoney Post请求 4.获取用户信息2 请求方式 get/post 5.修改用户余额2 6    上传文件 7.mysql 8.断言

2017-05-07,周日整理

上一周的总结任务被我犯拖延症给拖到了这一周,二期的测试考的很差,除了自己应试的技巧有问题之外,还有对已经学过的东西并没有形成一个很深刻的印象,导致动手答题时,只能得到一个模糊不准确的答案.吸取教训,确实在二期末尾这短时间很放松,没有去稳固知识点,没有去拓展知识点.上一周和这一周讲了设计模式,velocity.struts2.mybatis.spring四个框架,知识内容非常之多,学起来感觉到吃力,所以在之后,一定要继续认真对待,对于该记忆和理解的重点一定要能手写出来,一切为了面试能轻松! 1.V

14.EVE-NG更新方便,不费劲儿!

文章列表(关注微信公众号EmulatedLab,及时获取文章以及下载链接) 1.EVE-NG介绍(EVE-NG最好用的模拟器,仿真环境时代来临!) 2.EVE-NG安装过程介绍 3.EVE-NG导入Dynamips和IOL 4.EVE-NG导入QEMU镜像 5.EVE-NG关联SecureCRT,VNC,Wireshark 6.EVE-NG网卡桥接,带您走进更高级的实验 7.EVE-NG硬盘扩容,存储海量镜像 8.EVE-NG定制个人镜像,脚本快速导入 9.EVE-NG容纳H3C.Huawei,

问题 1006: C语言程序设计教程(第三版)课后习题5.4

/******************************************************************** @file Main.cpp @date 2017-05-07 @author Zoro_Tiger @brief 问题 1006: C语言程序设计教程(第三版)课后习题5.4 http://www.dotcpp.com/oj/problem1006.html *************************************************

然而,该来的还是来了(Diary)

2017-05-07 LG月赛成功炸掉...发现自己真的好多东西不会啊.对某些知识仅仅有最基础的一点理解啊!连线段树都理解不了怎么办?归并排序(including分治+贪心)全部炸掉啊.感觉自己最近一段时间A不了多少题了.好迷啊! 然而只能说最近一直是信仰支持着我(没了信仰早就不知道死了几百回了).ltt说要有个大新闻,然而直到现在还没有一点信.希望lg别炸掉了. 然而据说学好骗分就可以拿到1=,这话不靠谱啊,月赛6道题才骗了120+,时间消耗还7Kms+.没爱了啊! 目前暂时Rank 8?据说

【夜读】这世界上根本没有稳定的工作

2017-05-07 青春上海 1 一个人成功地失业需要多久? 庞光的答案是:五年. 庞光是我的朋友,五年前,大学毕业后,他回到老家最大的国企工作.每天朝九晚五,工资和福利固定,偶尔还有些额外的收入,漂亮的妻子,可爱的孩子,一切按部就班,日子好不甜蜜. 忙碌中偷点小懒,闲暇时就打打牌,周末组织一个自驾游,庞光以为,这样稳定的生活起码会持续"一亿光年". 但没多久,庞光就赶上了企业精简,他出现在裁员的名单中.庞光极不情愿地夹着简历迈进人才市场,可没有一技之长,没有过硬人脉,庞光已经是职场

问题 1005: C语言程序设计教程(第三版)课后习题4.9

/******************************************************************** @file Main.cpp @date 2017-05-07 @author Zoro_Tiger @brief 问题 1005: C语言程序设计教程(第三版)课后习题4.9 http://www.dotcpp.com/oj/problem1005.html *************************************************

2016.3 — 2017.5

2016-03-14 http://seller.cheshi.com/sellernews_1049533_7838716.html 2016-04-08 http://www.autotimes.com.cn/market/201604/news_138769.html 2016-06-11  http://www.autotimes.com.cn/market/201606/news_208460.html 2016-07-02  http://www.autotimes.com.cn/m