C语言:2.1.3动态分配内存.ppt

C语言:2.1.3动态分配内存.ppt

ID:56527495

大小:280.00 KB

页数:63页

时间:2020-06-27

C语言:2.1.3动态分配内存.ppt_第1页
C语言:2.1.3动态分配内存.ppt_第2页
C语言:2.1.3动态分配内存.ppt_第3页
C语言:2.1.3动态分配内存.ppt_第4页
C语言:2.1.3动态分配内存.ppt_第5页
资源描述:

《C语言:2.1.3动态分配内存.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、主讲老师:欧阳坚动态分配内存1动态内存分配基础 2动态内存分配实例3动态内存分配进阶本次课程大纲Section1:动态分配内存基础动态分配内存概述什么时候需要动态分配内存?实例:顺序对一批文件进行解析,但是不知道文件的大小,如何建立缓冲区?malloc函数malloc函数原型:void*malloc(size_tn);n是要分配的内存的大小,返回值是分配内存的块的首地址malloc函数例1:使用malloc函数分配一个可以容纳10个整型元素的内存空间,并将其用作一个整型数组malloc函数关键代码:int*array;array=(int*)malloc(10*sizeof(int)

2、);注意:内存大小不能写成数组元素的个数malloc函数例2:定义一个结构structtest{inta;charb;intc[10];};使用malloc函数分配一个此种结构类型的对象malloc函数关键代码:structtest*p;p=(structtest*)malloc(sizeof(structtest));需要注意的问题(1)malloc函数是一个库函数,它并不是C语言中的关键字:需要头文件才可以使用该函数并不是所有的平台都可以使用该函数,尤其是一些单片机系统需要注意的问题(2)指针类型转换是必须的,关系到接收分配好的内存块的地址可以向前看多少字节。

3、如果不做指针类型转换会怎么样?void*指针存在的意义。需要注意的问题(3)内存块大小的可移植性问题分配一个整型变量数组应使用:数组元素个数*sizeof(int)确定内存块的大小问题:sizeof和strlen函数的区别free函数free函数原型:voidfree(void*p);p是要释放的已分配内存的块的首地址free函数释放一块动态分配的内存:例如:int*p;p=(int*)malloc(sizeof(int));free(p);需要注意的问题(1)free函数同样是一个库函数(2)free函数的参数必须是一个由动态内存分配方法分配的内存块的首地址(使用malloc函数分

4、配的内存)动态分配内存特点内存空间大小可以是一个变量,其值在运行时确定内存空间在运行时分配,在程序结束时收回;内存的分配由操作系统参与完成动态分配的内存空间在未释放之前均可以被引用,保证其生命期Section2:链表链表的概述structnode{intnode;/*数据域,存储结点的值*/structnode*next;};链表示意图value1value2value3value4NULL处理链表使用的函数动态申请内存:void*malloc(size_tn);释放动态内存:voidfree(void*);插入一个结点structnode*p=&b;a.next=p;/*连接a结点

5、和b结点*/b.next=&c;/*连接b结点和c结点*/删除一个结点structnode*p=&b;a.next=b.next;/*连接a结点和c结点*/free(p);/*摘下的b结点一定要释放掉*/Section3:动态内存分配实例动态内存分配实例设计一个学生链表,其每个结点是一个学生信息的集合。每个结点包含如下信息:学生姓名、学号、C语言成绩三项。初始时拥有3个学生,添加一个学生(使用一个函数实现此操作),再删除一个学生(使用另一个函数实现此操作),并打印该学生的信息。实例关键点分析结点结构:structinfo{charname[10];intid;intscore;};s

6、tructstd{structinfo;structstd*next;};实例关键点分析main函数:intmain(void){/*初始化学生链表*//*插入一个学生信息结点*//*删除一个学生的信息,并且打印*/return0;}实例关键点分析intinsert(char*name,intid,intscore){/*分配一个structstd结构对象*//*将参数赋值到结构对应的成员中*/return1;/*正确完成操作,返回1*/}实例关键点分析intremove(intid,structstd**res){/*根据id找到该学生的信息结点*//*将该结点从链表上取下*//*

7、使用res保存该节点*//*释放该结点所占用的内存*/return1;/*成功操作返回1*/}综合实例(1)实现print函数对其遍历打印链表(2)实现destroy函数释放每一个链表节点(3)实现search函数查找链表中的元素(4)实现一个升级版的insert将元素按顺序插入(5)实现一个升级版的search函数按顺序查找(6)实现get_count函数得到链表元素个数综合实例两个扩展函数:(1)实现一个链表排序函数,使用冒泡排序的方法。(2)遍历一个

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。