




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020年3月26日 第1页 第11章指针进阶 2020年3月26日 第2页 本章要点 指针数组和指向指针的指针是如何被定义和使用的 指针如何作为函数的返回值 指向函数的指针的意义是什么 什么是结构的递归定义 哪种应用需要这种定义方法 对链表这种数据结构 如何进行动态内存分配操作 如何建立单向链表并实现插入 删除以及查找操作 2020年3月26日 第3页 11 1布袋中的彩色球 例1已知一个不透明的布袋里装有红 蓝 黄 绿 紫同样大小的圆球各一个 现从中一次抓出两个 问可能抓到的是什么颜色的球 2020年3月26日 第4页 程序解析 includeintmain void char color 5 red blue yellow green purple 初始化 intcount 0 i j for i 0 i 4 i for j 0 j 4 j if i j continue count printf 6d count printf 10s 10s n color i color j return0 1redblue2redyellow3redgreen4redpurple5blueyellow6bluegreen7bluepurple8yellowgreen9yellowpurple10greenpurple 指针数组 2020年3月26日 第5页 2 指针数组的概念 char color 5 类型名 数组名 数组长度 inta 10 a是一个数组 它有10个元素每个元素的类型都是整型char color 5 color是一个数组 它有5个元素每个元素的类型都是字符指针 2020年3月26日 第6页 char color 5 red blue yellow green purple color是一个数组 它有5个元素每个元素的类型都是字符指针数组元素可以处理字符串对指针数组元素的操作相当于对同类型指针变量的操作printf 10s 10s n color i color j 2020年3月26日 第7页 includeintmain void inti char color 5 red blue yellow green purple tmp 输出字符串的地址和内容 思考 for i 0 i 5 i printf x s n color i color i return0 420064 red42005c blue420054 yellow42004c green420044 purplecolor 0 purple color 4 red 例2使用指针数组输出5种颜色的英文名称 2020年3月26日 第8页 交换color 0 与color 4 的值 2020年3月26日 第9页 3 指向指针的指针 1 定义 指向指针的指针 二级指针 类型名 变量名inta 10 int p 2020年3月26日 第10页 inta 10 b 20 t int pa 例11 4 操作 1 ppt ppb ppb ppa ppa ppt 操作 2 pt pb pb pa pa pt 操作 3 t b b a a t 2020年3月26日 第11页 例3改写例1 用指向指针的指针实现 includeintmain void char color 5 red blue yellow green purple char pc color intcount 0 i j for i 0 i 4 i for j 0 j 4 j if i j continue count printf 6d count printf 10s 10s n color i color j return0 指向指针的指针 pc i pc j 2020年3月26日 第12页 4 用指针数组处理多个字符串 处理多个字符串二维字符数组charccolor 7 red blue yellow green purple 指针数组char pcolor red blue yellow green purple 使用指针数组更节省内存空间 2020年3月26日 第13页 1 用指针数组处理多个字符串 排序 例11 5将5个字符串从小到大排序后输出 includeintmain void inti inta 5 6 5 2 8 1 voidfsort inta intn fsort a 5 for i 0 i 5 i printf d a i return0 includeintmain void inti char pcolor 5 red blue yellow green purple voidfsort char color intn fsort pcolor 5 for i 0 i 5 i printf s pcolor i return0 2020年3月26日 第14页 例11 5字符串排序 voidfsort inta intn intk j inttemp for k 1 ka j 1 temp a j a j a j 1 a j 1 temp voidfsort char color intn intk j char temp for k 1 k0 temp color j color j color j 1 color j 1 temp 2020年3月26日 第15页 pcolor 0 pcolor 1 pcolor 2 pcolor 3 pcolor pcolor 4 排序前 pcolor 0 pcolor 1 pcolor 2 pcolor 3 pcolor pcolor 4 排序后 2020年3月26日 第16页 2 动态输入多个字符串 例6输入一些球的颜色 以 作为输入结束标志 再输出这些颜色 其中颜色数小于20 颜色的英文名称不超过10个字符 2020年3月26日 第17页 include include includeintmain void inti n 0 char color 20 str 10 printf 请输入颜色名称 每行一个 结束输入 n scanf s str while str 0 color n char malloc sizeof char strlen str 1 strcpy color n str n scanf s str printf 你输入的颜色是 for i 0 i n i printf s color i return0 请输入颜色名称 每行一个 结束输入 redblueyellow 你输入的颜色是 redblueyellow 2020年3月26日 第18页 3 对指针数组的进一步讨论 char color red blue yellow green purple color 二级指针 char color 0 color 2 指向color 2 color 2 和color 2 等价color 0 指向字符串 red 的首字符rcolor 0 2 指向首字符r后的第2个字符d 2020年3月26日 第19页 color k color k printf s color 2 printf s color 2 2020年3月26日 第20页 11 1 5命令行参数 2020年3月26日 第21页 11 2解密藏头诗 11 2 1程序解析11 2 2指针作为函数的返回值11 2 3指向函数的指针 2020年3月26日 第22页 11 2解密藏头诗 例8输入一首藏头诗 假设只有4句 输出其真实含义 藏头诗 将这首诗每一句的第一个字连起来 所组成的内容就是该诗的真正含义 请输入藏头诗 一叶轻舟向东流 帆梢轻握杨柳手 风纤碧波微起舞 顺水任从雅客悠 一帆风顺 2020年3月26日 第23页 includechar change chars 20 chart intmain void inti chars 4 20 t 10 p printf 请输入藏头诗 n for i 0 i 4 i scanf s s i p change s t printf s n p return0 char change chars 20 chart inti for i 0 i 4 i t 2 i s i 0 t 2 i 1 s i 1 t 2 i 0 returnt 2020年3月26日 第24页 例9输入一个字符串和一个字符 如果该字符在字符串中 就从该字符首次出现的位置开始输出字符串中的字符 要求定义函数match s ch 在字符串s中查找字符ch 如果找到 返回第一次找到的该字符在字符串中的位置 地址 否则 返回空指针NULL 例如 输入字符r和字符串program后 输出rogram 2020年3月26日 第25页 includechar match char s charch while s 0 if s ch return s 若找到字符ch 返回相应的地址 elses return NULL 没有找到ch 返回空指针 intmain void charch str 80 p NULL printf PleaseInputthestring n scanf s str getchar ch getchar if p match str ch NULL printf s n p elseprintf NotFound n return0 PleaseInputthestring Universityvversity 字符指针p接收match返回的地址 从p指向的存储单元开始 连续输出其中的内容 直至 0 为止 PleaseInputthestring schoolaNotFound 2020年3月26日 第26页 11 2 3指向函数的指针 每个函数都占用一段内存单元 有一个入口地址 起始地址 函数名 函数的入口地址函数指针 一个指针变量 接收函数的入口地址 让它指向函数通过函数指针调用函数做为函数的参数 2020年3月26日 第27页 例11建立一个学生成绩信息 包括学号 姓名 成绩 的单向链表 学生记录按学号由小到大顺序排列 要求实现对成绩信息的插入 修改 删除和遍历操作 11 3学生信息管理的链表实现 2020年3月26日 第28页 1链表的概念 一种动态存储分布的数据结构若干个同一结构类型的 结点 依次串接而成单向链表 双向链表 头指针 结点 尾结点 2020年3月26日 第29页 结点定义 structstud node intnum charname 20 intscore structstud node next 结构的递归定义 2020年3月26日 第30页 链表 与数组比较 数组事先定义固定长度的数组在数组元素个数不确定时 可能会发生浪费内存空间的情况链表动态存储分配的数据结构根据需要动态开辟内存空间 比较方便地插入新元素 结点 使用链表可以节省内存 提高操作效率 2020年3月26日 第31页 动态存储分配函数malloc void malloc unsignedsize 在内存的动态存储区中分配一连续空间 其长度为size若申请成功 则返回一个指向所分配内存空间的起始地址的指针若申请不成功 则返回NULL 值为0 2020年3月26日 第32页 malloc 示例 int ip int malloc sizeof int structstudent p p structstudent malloc sizeof structstudent 调用malloc时 用sizeof计算存储块大小虽然存储块是动态分配的 但它的大小在分配后也是确定的 不要越界使用 2020年3月26日 第33页 动态存储释放函数free 当某个动态分配的存储块不再用时 要及时将它释放voidfree void ptr 释放由动态存储分配函数申请到的整块内存空间 ptr为指向要释放空间的首地址 free ip free p 2020年3月26日 第34页 3单向链表的常用操作 链表的建立链表的遍历插入结点删除结点 2020年3月26日 第35页 1 链表的建立 structstud node head tail p head tail NULL size sizeof structstud node p structstud node malloc size 2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【课件】大气压强教学课件2024-2025学年初中物理人教版(2024)八年级下册+
- 中小学教师思政课培训
- 肿瘤介入术后护理
- 2024年度青海社区工作者练习题库及答案
- 员工入职安全培训大纲
- 生产工艺研发培训课件
- 2.0信息技术培训
- 护理循环系统
- 衬衫制作流程
- 肿瘤放疗病人心理护理
- 推动变革实现企业扁平化管理
- 可克达拉职业技术学院招聘事业单位工作人员笔试真题2024
- 2025至2030中国寺庙经济市场深度调研与未来前景发展研究报告
- 中国雄激素性秃发诊疗指南(2023)解读 课件
- 2025年全国低压电工作业证(复审)考试练习题库(600题)附答案
- 2025漳浦县国企招聘考试题目及答案
- 知识产权相关的国际法的试题及答案
- 钢结构墙板拆除施工方案
- 软件开发文档-电子政务云服务平台系统招标文件范本
- 2025年养老护理员专业知识测试卷:养老护理员护理技能操作试题集
- PET考试培训课件
评论
0/150
提交评论