电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

2014c语言与程序设计第十讲

39页
  • 卖家[上传人]:E****
  • 文档编号:89082667
  • 上传时间:2019-05-17
  • 文档格式:PPT
  • 文档大小:5.68MB
  • / 39 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、C语言程序设计基础,2013.9,第1讲 概述-c程序要素与结构 第2讲 c语言的输入输出 第3讲 数据类型与关系运算 第4讲 c程序设计初步(条件判别、循环、数组初步) 第5讲 教学回顾(变量、语句、函数与程序结构) 第6讲 函数一(概念、形参与实参、函数间的参数传递) 第7讲 函数二(变量值与地址、函数与程序设计、调用形式) 第8讲 函数三(递归算法、指针、二维数组) 第9讲 指针与函数 第10讲 链表一(指针与链表) 第11讲 链表二(结构指针与链表设计) 第12讲 文件、算法初步,课程大纲,第十讲 指针与函数,动态内存申请 概念 内存申请函数malloc() 释放占用的内存free() 指针与动态内存 指针与数据结构 指针与数据结构 线性表的概念 指针与链表 链式存储的概念 指针与链 用内部指针关联同类型的节点 指针实践 生成一个简单单链表 生成一个简单循环链表 检索链表非循环链表 检索链表循环链表 拷贝单链表,教材9.3、9.4节内容,练习七第四题-二维数组,程序调试练习。整型数组a定义如下,在表格第二列中说明第一列中的表示形式所表达的意义,并在第三列中写出它的数值(编一简短

      2、程序用DEBUG单步跟踪)。 int a34;,作业认真用debug做了吗? 二位数组概念清楚了吗?,动态申请内存空间,语言不允许动态数组类型。例如: int i=15; int datai; /不能用变量定义数组的大小,想用变量对数组的大小作动态说明,这是错误的,在实际的编程中,所需的内存空间,取决于实际输入的数据,无法预先确定。 为此,提供了内存管理函数,可以按需、动态地申请内存空间,也可把不再使用的空间,送回给操作系统,为有效地利用内存资源提供了手段。,+可以,通过new()动态申请数组长度。例如: int size; cinsize; int *p=new intsiez; /用i值定义数组当前长度,#include int main() int size; coutsize; int *p=new intsize; for(int j=0;jsize;j+)*(p+j)=j; for(j=0;jsize;j+)printf(“%d,“,*(p+j); coutendl; return (0); ,标准c的内存空间申请函数malloc,调用形式: (类型说明符*)malloc(

      3、size) 功能: 在内存的动态存储区中分配一块长度为“size“字节的连续区域。函数的返回值为该区域的首地址。 “类型说明符”表示把该区域用于何种数据类型。(类型说明符*)表示把返回值强制转换为该类型指针。 “size”是一个无符号数。 头部函数是:#include 例如:cp=(char *)malloc(100); 表示分配100个字节的内存空间,并强制转换为字符数组类型,函数的返回值为指向该字符数组的指针,把该指针赋予指针变量cp。 内存可能申请失败,此时返回的cp为空指针。,#include #include #include int main() int n; char *cp; printf(“输入字符串长度:“); scanf(“%d“, ,定义一个字符指针,你当前需要的字符串长度,根据你的需要申请n个单元长度内存,把字符串输入到系统动态分配的长度为n个单元的内存区域,如果申请失败,退出程序,申请类型为char,长度为n的内存区域,malloc在函数内申请的变量作用域在哪里?返回主调函数后,是否还存在?,标准c的内存空间申请函数malloc,动态内存申请的存储空间生存期

      4、,#include #include #include char *input(); int main() char *cp; cp=input(); printf(“输入字符串n“); scanf(“%s“,cp); printf(“n你的输入是:%sn“,cp); return(0); char *input() int n; char *cp; printf(“输入字符串长度:“); scanf(“%d“,在input函数中申请动态内存,申请了字符串长度n的空间,并返回给主调函数。,动态内存申请的存储空间生存期,input给cp赋值,malloc在被调函数内申请的空间,但它在工程存活期间,该空间一直有效。,注意,c不检查是否越界,释放内存空间函数free,调用形式: free(void*ptr); 功能: 释放ptr所指向的一块内存空间。 ptr是一个任意类型的指针变量,它指向被释放区域的首地址。 被释放区应是由malloc函数所分配的区域。 头部函数是:#include 例如: cp=(char *)malloc(100); /分配100个字节的内存空间 . free(cp);

      5、 free函数释放cp指向的内存空间。,void main(void) struct stu char *num; char *name; float score; *ps; ps=(struct stu*)malloc(sizeof(struct stu); if(!ps)printf(“memorizer overn“);exit(-1); ps-num=“102“; ps-name=“Zhang ping“; ps-score=62.5; printf(“Number=%snName=%snScore=%.2fn“,ps-num,ps-name,ps-score); free(ps); ,定义一个结构类型,申请一个stu结构类型长度的空间,如果申请失败给出提示信息,内存申请成功则输入信息,内存不使用之后,释放给计算机系统,把字符串送到ps-指向的内存?,strcpy(ps-num,“lwz“);,把字符串拷贝到ps-指向的内存?,结构变量的动态内存申请空间,指针ps-num指向的是常量字符串,只申请了结构变量stu大小的内存空间,计算机的内存管理,空闲块2,空闲块3,空闲块4,空

      6、闲块指针,项目a占用内存,函数1,项目a,程序申请内存区域,空闲块1,计算机空闲内存区域,释放内存区域,函数执行完毕,空闲块1,一个任务所占用的内存是动态分配的,让指针获得指向申请内存的起点,struct node a,b; 声明变量a和b,编译时给a、b分配内存地址(空间); 在项目生命中,a、b占用的空间始终存在,即它们地址是确定的; struct node *head,*p; 声明两指针变量(node类型),此时head、p的值为空,即指向空地址; head=(struct node*)malloc(sizeof(struct node); 程序运行至此的时候,向操作系统申请一个长度为node的内存空间,该空间首地址被赋值给head,该地址是随机分配的。 变量声明只为存储。 动态申请内存则是存储节点(数据)的同时,通过指针,也可以描述一种动态的逻辑关系。,第十讲 指针与函数,动态内存申请 概念 内存申请函数malloc() 释放占用的内存free() 指针与动态内存 指针与数据结构 指针与数据结构 线性表的概念 指针与链表 链式存储的概念 指针与链 用内部指针关联同类型的节点 指

      7、针实践 生成一个简单单链表 生成一个简单循环链表 检索链表非循环链表 检索链表循环链表 拷贝单链表,指针与数据结构,指针代表数据的物理地址,它指向一个节点的内存位置。 数据节点之间的关系有多种,数组可以存储具有线性关系的表格。但是数组无法存储如下一种关系:,C语言,04教程,中考,单词排序,杨辉三角,debug,源程序,期末,总分,我的文件夹结构,期中成绩,试卷,节点之间的连接关系是非线性的,类似一棵树的结构,怎样在计算机中存储文件夹所表达的逻辑关系?,指针的指向,可以用物理位置描述数据的逻辑关系,文件目录会随时增删,因此节点之间的连接关系是非线性的且动态变化的,如果有一个指针指向后续节点位置; 程序可以根据指针找到其后续节点; 就能在计算机中存储文件夹所表达的逻辑关系,修改指针的指向,可以动态的跟随后续节点的逻辑关系变化,指针与数据结构,源,有限元素集合中(12个节点),元素之间的典型关系(n种关系),酱缸娱乐圈,线性表的概念,数组元素在内存是顺序排列的,它反映了逻辑上具有线性关系的数据集合。,struct student char num20; char name40; char

      8、class40; int sex; char birthday20; char tel20; A100;,数组元素的顺序存储表达了表格在逻辑上的线性关系,一条记录是数组中的一个元素(节点),物理的顺序存储,描述了节点的顺序逻辑关系,第十讲 指针与函数,动态内存申请 概念 内存申请函数malloc() 释放占用的内存free() 指针与动态内存 指针与数据结构 指针与数据结构 线性表的概念 指针与链表 链式存储的概念 指针与链 用内部指针关联同类型的节点 指针实践 生成一个简单单链表 生成一个简单循环链表 检索链表非循环链表 检索链表循环链表 拷贝单链表,线性表顺序存储与链式存储,a0,a1,a2,an-1,ai,顺序存储描述的线性表,指针描述的线性表,p(0),p(1),p(2),p(i+1),p(i),物理相邻,逻辑相邻,指针指向相邻,逻辑相邻,*next,*next,*next,*next,*next,指针与链,一个玉坠,商业意义上的玉应该是一串手链、项链。,镶入一个环,嵌入一个钩,一个玉坠,具有了环、钩的结构之后,才有可能成为商业意义上的一串手链、项链。,环表示起点,钩代表指针,

      9、封装对象的数据节点; 以及为对象定义的存储方式:链表。,数据、和数据封装以后构成的节点,指针与链,美丽的链非循环链,美丽的链循环链,指针表达的抽象逻辑关系,指针在数据结构起到关联节点的作用; 让指针从一个节点元素内指向另一个节点元素,通过指针连接节点元素之间的存储位置,从而让它们之间关联在一起,进而表达了它们之间的逻辑关系。 指针能从一个节点指向另一(或者是多个)节点,它必须是在节点内部,因此,在结构定义中加入指针变量,指针在节点内,它指向下一个节点; 假定程序找到了当前节点位置,就能根据指针找到后续节点所在,这就是节点关联。,a1,a2,指针在节点内部,a3,节点之间用指针串成一条链,表明节点之间是线性逻辑关系,Null,链尾的指针为空,如同字符串结尾符,具有指针的节点结构,struct student char num20; char name40; char class40; int sex; char birthday20; char tel20; struct student *next; ;,数据区域,指针区域,在student结构分成两部份,数据域描述学生属性的基本信息; 该节点的指针域有指针变量next,若用next指向学生集合中的其它节点,可以表达集合中节点之间的关系,使它们关联在一起。,指向同类型的节点,用节点内部指针关联两个节点,struct student *head,*p; 设指针head已指向内存里的一个节点a1; 现在,再申请一个节点a2; 对a1的next赋值使其指向a2,从而让a1与a2关联起来;,a2=(struct student*)malloc(sizeof(student)

      《2014c语言与程序设计第十讲》由会员E****分享,可在线阅读,更多相关《2014c语言与程序设计第十讲》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.