- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第11讲 再述指针 (第6章.C精华篇) 链表 什么是链表? 链表 为什么使用链表? 链表 插入结点 删除结点 二、 函数的指针及函数的指针变量 概念 函数的指针就是函数代码在内存中所占存储区的首地址。 函数的指针变量(指向函数的指针变量)存放函数的指针,用来指向某函数。p++, p+n 无意义。可以在不同时间用同一个指针变量调用不同函数。 指向函数的指针变量的定义 类型标示符 (*变量名) ( ); 例如: float (*p)( ); 表示 p是一个指向返回值为float 型的函数的指针变量。 运用 [例]求n!。 赋值形式:指向函数的指针变量名=函数名; 调用形式:(*指向函数的指针变量)(实参表); (expfun.c) 用指向函数的指针变量作函数的参数。 在C语言中可以把指向函数的指针变量作为参数传递到其他函数。例如在有些程序中,用户可以从各种可供选择的选择项中选用他所需的操作,而各选项又是由一个独立的函数来实现的,在程序实现中就可以采用函数指针作参数的方式完成。 返回指针值的函数 定义 类型标示符 *函数名 ( 参数表 ); 例如: char *person ( char name[ ], char sex); 函数 person( ) 返回的指针指向 char 型量。 [例]编写一个strchr()函数,它的作用是在一个字符串中找一个指定的字符,返回该字符的地址。 # include stdio.hchar *strch(char *str,char ch) { while(*str!=ch) str++; /* 查找指定字符的位置*/ return(str); /* 返回找到字符的地址*/ } 指针数组和二级指针 概念 数组的元素是指针变量。 定义: 类型标示符 *数组名 [ 数组长度 ] ; 例如: char *p[20] ; 定义了p[0] - -p[19] 计20个带下标的指针变量,都指向char 型量。 适合于处理字串。 二级指针 二次间接。 定义:数据类型表示符 **指针变量名; 例如: int **p; 引用方式为:**指针变量名 [例1] main( ) {static char *name[ ]={“Turbo C”, “ANSI C”, “MS C”, “Visual C ”, ….) ; char **p=name; int i; for(i=0;i10; i++) printf(“%s\n”, *p++); /* ? **p */ } * 指向结构体类型数据的指针 二级指针 main函数中的参数 指针再函数中的应用 指向结构体类型数据的指针 一、指向结构体类型变量的指针 [例] 打印通讯录。(excommu.c) 二、指向结构体数组的指针 [例]用结构指针建立一个图书检索系统。按书名检索。 (exsearch.c) 三、结构指针的使用 [例]链表。 链表的建立、遍历、查找、插入、删除操作。 线性表:有限个元素的有序集合。可用数组或链表表示。 数组和链表两 者都逻辑连续,但后者可以在空间不连续。 动态数据结构:其大小可变;动态分配存储空间。链表是最简单的一种,属于线性动态数据结构,树是非线性动态数据结构。 链表:链表中的一个元素称为一个结点或节点。每个结点由两部分组成:数据部分、指向上下结点的指针。靠这样的指针把各个结点串联起来构成链表。分单向、双向链表,后者可以两方向连接。 0 0 单向链表 双向链表 0 数据部分 1)不需要连续存储空间,可利用内存碎片; 2)插入删除元素不需移动其它元素,处理速度快; 3)动态分配存储空间,不必以最大可能长度预定存储空间,且可以随意扩充表的容量。 动态分配存储空间(使用函数) void *malloc(unsigned size)函数(memory allocation):在内存的动态存储区中分配一个长度为size的连续空间,size为结点元素各成员项的总字节数,可以用sizeof(数据类型名)运算符获得。该函数的返回值是一个指针,它的值是所分配存储区的起始地址,当该函数未成功执行时,返回值为0。 如: struct student
您可能关注的文档
- C#网络应用编程基础 教学课件 作者 马骏习题答案 第09章 习题解答.doc
- C#网络应用编程基础 教学课件 作者 马骏习题答案 第10章 习题解答.doc
- C#网络应用编程基础 教学课件 作者 马骏习题答案 第11章 习题解答.doc
- C#网络应用编程基础 教学课件 作者 马骏习题答案 第12章 习题解答.doc
- C#网络应用编程基础 教学课件 作者 马骏习题答案 第13章 习题解答.doc
- C#网络应用高级编程 教学课件 作者 马骏 郑逢斌 沈夏炯1 第1章 进程、线程与网络协议.ppt
- C#网络应用高级编程 教学课件 作者 马骏 郑逢斌 沈夏炯1 第2章 TCP应用编程.ppt
- C#网络应用高级编程 教学课件 作者 马骏 郑逢斌 沈夏炯1 第3章 UDP应用编程.ppt
- C#网络应用高级编程 教学课件 作者 马骏 郑逢斌 沈夏炯1 第4章 P2P应用编程.ppt
- C#网络应用高级编程 教学课件 作者 马骏 郑逢斌 沈夏炯1 第5章 SMTP与POP3应用编程.ppt
- C_C++程序设计教程 教学课件 作者 王连相 等 第12讲 复合数据类型4.ppt
- C_C++程序设计教程 教学课件 作者 王连相 等 第14讲 文件.ppt
- C_C++程序设计教程 教学课件 作者 王连相 等 第15讲 常用算法举例.ppt
- C_C++程序设计教程 教学课件 作者 王连相 等 第67讲函数.ppt
- C_C++程序设计教程与上机实训 教学课件 作者 于文强 程立福 毛慧凤 第八章.PPT
- C_C++程序设计教程与上机实训 教学课件 作者 于文强 程立福 毛慧凤 第二章.PPT
- C_C++程序设计教程与上机实训 教学课件 作者 于文强 程立福 毛慧凤 第九章.PPT
- C_C++程序设计教程与上机实训 教学课件 作者 于文强 程立福 毛慧凤 第六章.PPT
- C_C++程序设计教程与上机实训 教学课件 作者 于文强 程立福 毛慧凤 第七章.PPT
- C_C++程序设计教程与上机实训 教学课件 作者 于文强 程立福 毛慧凤 第三章.PPT
文档评论(0)