网站大量收购闲置独家精品文档,联系QQ:2885784924

C程序设计谭浩强第八章课后.pptxVIP

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

C程序设计谭浩强第八章课后

指针数组与指向指针的指针

字符串与字符数组

函数指针与回调函数

动态内存分配与链表

文件操作与文件I/O

综合案例分析与实践

01

指针数组与指向指针的指针

指针数组是指数组中每个元素都是指针类型的数组。它通常用于存储多个指向相同类型数据的指针。

指针数组定义

指针数组常用于处理字符串数组、函数指针数组等场景,可以方便地管理和操作一组相关的指针。

指针数组应用

指向指针的指针是指一个指针变量,它存储的是另一个指针变量的地址。通过指向指针的指针,可以间接访问和操作被指向的指针变量。

指向指针的指针定义

在C语言中,可以通过双重指针(即指向指针的指针)来实现对指针数组的访问和操作。双重指针的使用需要注意内存分配和释放,以避免内存泄漏和野指针等问题。

指向指针的指针实现

02

字符串与字符数组

字符串是由零个或多个字符组成的有序字符序列,通常表示为字符数组或字符指针。

包括字符串的输入/输出、字符串的连接、字符串的比较、字符串的复制等。

字符串操作

字符串概念

字符数组定义

定义一个足够长的字符数组来存储字符串,数组长度应至少比字符串长度多1,以容纳字符串结束符0。

字符串存储

将字符串中的每个字符依次存储到字符数组中,并在字符串末尾添加结束符0。

01

02

string.h头…

包含了处理字符串的一系列函数,如strlen()、strcpy()、strcat()、strcmp()等。

strlen()函数

用于计算字符串的长度,返回值为字符串中字符的个数(不包括结束符0)。

strcpy()函数

用于将源字符串复制到目标字符串中,包括结束符0。

strcat()函数

用于将源字符串连接到目标字符串的末尾,包括结束符0。

strcmp()函数

用于比较两个字符串的大小,返回值为两个字符串的差值。

03

04

05

03

函数指针与回调函数

函数指针定义

函数指针是指向函数的指针变量,其本质是指针,只是指向的内容是函数。通过函数指针,可以间接调用函数。

函数指针的声明

函数指针的声明需要指定函数的返回类型和参数列表。例如,`int(*fp)(int,int);`声明了一个指向接受两个int参数并返回int类型结果的函数的指针。

函数指针的使用

函数指针的使用包括赋值、调用和作为函数参数等。赋值时,需要将函数名赋值给函数指针;调用时,需要使用`(*函数指针名)(参数列表)`的形式;作为函数参数时,可以传递函数指针实现回调函数等高级功能。

回调函数原理

回调函数是指通过函数指针调用的函数。在C语言中,可以将函数的指针作为参数传递给其他函数,并在需要的时候通过这个指针调用该函数,这个过程就是回调。

回调函数的实现

回调函数的实现需要定义回调函数、定义包含回调函数指针的函数原型、在调用函数中实现回调函数指针的调用等步骤。具体实现时,需要注意回调函数与被调用函数的参数列表和返回类型的一致性。

回调函数的作用

回调函数可以提高程序的灵活性和可扩展性,使得程序可以在运行时动态地改变其行为。同时,回调函数也是实现事件驱动编程的重要手段之一。

使用函数指针实现菜单选择功能。在这个案例中,可以定义一个包含多个菜单选项的函数数组,每个数组元素都是一个指向具体功能的函数指针。然后,根据用户的选择调用相应的函数。

使用回调函数实现排序算法。在这个案例中,可以定义一个排序函数,该函数接受一个待排序数组、数组长度和一个比较函数指针作为参数。比较函数用于确定两个元素的大小关系,排序函数根据比较函数的结果对数组进行排序。通过这种方式,可以实现多种排序算法,只需要提供不同的比较函数即可。

使用回调函数实现异步操作。在这个案例中,可以定义一个异步操作函数,该函数接受一个回调函数指针作为参数。当异步操作完成时,调用回调函数通知用户操作结果。这种方式可以实现非阻塞的异步操作,提高程序的响应性能。

案例一

案例二

案例三

04

动态内存分配与链表

malloc函数用于在堆区分配指定字节数的内存空间,并返回指向它的指针。如果分配成功,则返回指向被分配内存的指针,否则返回NULL。

使用malloc函数

calloc函数与malloc类似,但它会自动将内存初始化为0。它接受两个参数,分别是要分配的元素的数量和每个元素的大小。

使用calloc函数

realloc函数用于改变已分配内存的大小。如果原内存块足够大,realloc将返回原内存块的地址;否则,它将分配一个新的内存块,将原内存块的内容复制到新内存块中,并释放原内存块。

使用realloc函数

free函数用于释放之前分配的内存空间。在使用完动态分配的内存后,应及时调用free函数释放内存,以防止内存泄漏。

使用free函数

链表的基本操作

链表的基本操作包括创建链表、插入节点、删除节点、遍历

您可能关注的文档

文档评论(0)

156****6768 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档