[计算机软件及应用]c语言指针进阶

上传人:tia****nde 文档编号:70534567 上传时间:2019-01-17 格式:PPT 页数:40 大小:562.81KB
返回 下载 相关 举报
[计算机软件及应用]c语言指针进阶_第1页
第1页 / 共40页
[计算机软件及应用]c语言指针进阶_第2页
第2页 / 共40页
[计算机软件及应用]c语言指针进阶_第3页
第3页 / 共40页
[计算机软件及应用]c语言指针进阶_第4页
第4页 / 共40页
[计算机软件及应用]c语言指针进阶_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《[计算机软件及应用]c语言指针进阶》由会员分享,可在线阅读,更多相关《[计算机软件及应用]c语言指针进阶(40页珍藏版)》请在金锄头文库上搜索。

1、2019年1月17日,第 1 页,第11章 指针进阶,2019年1月17日,第 2 页,本章要点,指针数组和指向指针的指针是如何被定义和使用的? 指针如何作为函数的返回值? 指向函数的指针的意义是什么? 什么是结构的递归定义,哪种应用需要这种定义方法? 对链表这种数据结构,如何进行动态内存分配操作? 如何建立单向链表并实现插入、删除以及查找操作?,2019年1月17日,第 3 页,11.1 布袋中的彩色球,例1 已知一个不透明的布袋里装有红、蓝、黄、绿、紫同样大小的圆球各一个,现从中一次抓出两个,问可能抓到的是什么颜色的球?,2019年1月17日,第 4 页,程序解析,#include int

2、 main(void) char *color5 = “red“, “blue“, “yellow“, “green“, “purple“; /* 初始化 */ int count = 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 %10sn“, colori, colorj); return 0; ,1 red blue 2 red yellow 3 red green 4 red purple 5 blu

3、e yellow 6 blue green 7 blue purple 8 yellow green 9 yellow purple 10 green purple,指针数组,2019年1月17日,第 5 页,2. 指针数组的概念,char *color5; 类型名 *数组名数组长度 int a10; a是一个数组,它有10个元素 每个元素的类型都是整型 char *color5; color是一个数组,它有5个元素 每个元素的类型都是字符指针,2019年1月17日,第 6 页,char *color5 = “red“, “blue“, “yellow“, “green“, “purple“;

4、 color是一个数组,它有5个元素 每个元素的类型都是字符指针 数组元素可以处理字符串 对指针数组元素的操作相当于对同类型指针变量的操作 printf(“%10s %10sn“, colori, colorj);,2019年1月17日,第 7 页,#include int main(void) int i; char *color5 = “red“, “blue“, “yellow“, “green“, “purple“, *tmp; /* 输出字符串的地址和内容*/(思考) for(i = 0; i 5; i+) printf(“%x, %sn“, colori, colori); ret

5、urn 0; ,420064, red 42005c, blue 420054, yellow 42004c, green 420044, purple color0:purple, color4:red,例2 使用指针数组输出5种颜色的英文名称,2019年1月17日,第 8 页,交换color0与color4的值,2019年1月17日,第 9 页,3.指向指针的指针 (1)定义,指向指针的指针(二级指针) 类型名 *变量名 int a = 10; int *p = ,2019年1月17日,第 10 页,int a = 10, b = 20, t; int *pa = ,例11-4,操作(1)

6、:ppt = ppb; ppb = ppa; ppa = ppt;,操作(2):pt = pb; pb = pa; pa = pt;,操作(3):t = b; b = a; a = t;,2019年1月17日,第 11 页,例3 改写例1,用指向指针的指针实现。 #include int main(void) char *color5 = “red“, “blue“, “yellow“, “green“, “purple“; char *pc = color; int count = 0, i, j; for(i = 0; i = 4; i+) for(j = 0; j = 4; j+) if

7、(i = j) continue; count+; printf( “%6d“, count ); printf( “%10s %10sn“, colori, colorj ); return 0; ,指向指针的指针,*(pc + i), *(pc + j),2019年1月17日,第 12 页,4. 用指针数组处理多个字符串,处理多个字符串 二维字符数组 char ccolor 7 = “red“, “blue“, “yellow“, “green“, “purple“; 指针数组 char *pcolor = “red“, “blue“, “yellow“, “green“, “purple

8、“;,使用指针数组更节省内存空间,2019年1月17日,第 13 页,1. 用指针数组处理多个字符串排序,例11-5 将5个字符串从小到大排序后输出。,#include int main(void) int i; int a5 = 6, 5, 2, 8, 1; void fsort( int a , int n ); fsort( a, 5 ); for(i = 0; i 5; i+) printf(“%d “, ai); return 0; ,#include int main(void) int i; char *pcolor5= “red“, “blue“, “yellow“, “gre

9、en“, “purple“ ; void fsort(char *color , int n); fsort( pcolor, 5 ); for(i = 0; i 5; i+) printf(“%s “, pcolori); return 0; ,2019年1月17日,第 14 页,例11-5 字符串排序,void fsort(int a , int n) int k, j; int temp; for(k = 1; k aj+1) temp = aj; aj = aj+1; aj+1 = temp; ,void fsort(char *color , int n) int k, j; cha

10、r *temp; for(k = 1; k 0) temp = colorj; colorj = colorj+1; colorj+1 = temp; ,2019年1月17日,第 15 页,pcolor0,pcolor1,pcolor2,pcolor3,pcolor,pcolor4,排序前,pcolor0,pcolor1,pcolor2,pcolor3,pcolor,pcolor4,排序后,2019年1月17日,第 16 页,2. 动态输入多个字符串,例6 输入一些球的颜色,以#作为输入结束标志,再输出这些颜色。 其中颜色数小于20,颜色的英文名称不超过10个字符。,2019年1月17日,第

11、17 页,#include #include #include int main(void) int i, n = 0; char *color20, str10; printf(“请输入颜色名称,每行一个,#结束输入:n“); scanf(“%s“, str); while(str0 != #) colorn = (char *) malloc ( sizeof (char) * ( strlen(str) + 1 ) ); strcpy(colorn, str); n+; scanf(“%s“, str); printf(“你输入的颜色是:“); for(i = 0; i n; i+) p

12、rintf(“%s “, colori); return 0; ,请输入颜色名称,每行一个,#结束输入: red blue yellow # 你输入的颜色是:red blue yellow,2019年1月17日,第 18 页,3. 对指针数组的进一步讨论,char *color = “red“, “blue“, “yellow“, “green“, “purple“; color:二级指针(char *),&color0 color+2:指向color2 *(color+2)和color2等价 color0:指向字符串“red“的首字符r color0+2:指向首字符r后的第2个字符d,201

13、9年1月17日,第 19 页,colork*(color+k) printf(“%s“, color2); printf(“%s“, *(color+2);,2019年1月17日,第 20 页,*11.1.5 命令行参数,2019年1月17日,第 21 页,11.2 解密藏头诗,11.2.1 程序解析 11.2.2 指针作为函数的返回值 11.2.3 指向函数的指针,2019年1月17日,第 22 页,11.2 解密藏头诗,例8 输入一首藏头诗(假设只有4句),输出其真实含义。 藏头诗:将这首诗每一句的第一个字连起来,所组成的内容就是该诗的真正含义。,请输入藏头诗: 一叶轻舟向东流, 帆梢轻握

14、杨柳手, 风纤碧波微起舞, 顺水任从雅客悠。 一帆风顺,2019年1月17日,第 23 页,#include char *change(char s 20, char t ); int main(void) int i; char s420, t10, *p; printf(“请输入藏头诗:n”); for(i = 0; i 4; i+) scanf(“%s“, si); p = change(s, t); printf(“%sn“, p); return 0; ,char * change(char s 20, char t ) int i; for(i= 0; i 4; i+) t2*i

15、= si0; t2*i+1 = si1; t2*i = 0; return t; ,2019年1月17日,第 24 页,例9 输入一个字符串和一个字符,如果该字符在字符串中,就从该字符首次出现的位置开始输出字符串中的字符。 要求定义函数match(s, ch),在字符串s中查找字符ch,如果找到,返回第一次找到的该字符在字符串中的位置(地址);否则,返回空指针NULL。 例如,输入字符r和字符串program后,输出rogram。,2019年1月17日,第 25 页,#include char *match(char *s, char ch) while(*s != 0) if(*s = ch) return(s); /* 若找到字符ch,返回相应的地址 */ else s+; return(NULL); /* 没有找到ch,返回空指针 */ int main(void ) char ch, str80, *p = NULL; printf(“Pleas

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号