Chap11指针进阶11.1奥运五环色11.2字符定位11.3用链表构建学生信息库
Chap 11 指针进阶 11.1 奥运五环色 11.2 字符定位 11.3 用链表构建学生信息库
本章要点■指针数组和指向指针的指针是如何被定义和使用的?■指针如何作为函数的返回值?■指向函数的指针的意义是什么?■什么是结构的递归定义,哪种应用需要这种定义方法?■对链表这种数据结构,如何使用动态内存分配操作?■如何建立单向链表并实现插入、删除以及查找操作?
本章要点 ◼ 指针数组和指向指针的指针是如何被定义和使用 的? ◼ 指针如何作为函数的返回值? ◼ 指向函数的指针的意义是什么? ◼ 什么是结构的递归定义,哪种应用需要这种定义 方法? ◼ 对链表这种数据结构,如何使用动态内存分配操 作? ◼ 如何建立单向链表并实现插入、删除以及查找操 作?
11.1奥运五环色程序解析11.1.111.1.2指针数组的概念11.1.33指向指针的指针11.1.4用指针数组处理多个字符串*11.1.5命令行参数
11.1 奥运五环色 11.1.1 程序解析 11.1.2 指针数组的概念 11.1.3 指向指针的指针 11.1.4 用指针数组处理多个字符串 *11.1.5 命令行参数
11.1.1程序解析【例11-1已知奥运五环的5种颜色的英文单词按一定顺序排列,输入任意一个颜色的英文单词,从已有颜色中查找并输出该颜色的位置值,若没有找到,则输出“NotFound
11.1.1 程序解析 ◼ 【例11-1】已知奥运五环的5种颜色的英文 单词按一定顺序排列,输入任意一个颜色 的英文单词,从已有颜色中查找并输出该 颜色的位置值,若没有找到,则输出“Not Found
11.1.1程序解析运行结果1#includeInput a color:yellow#include指针数组int main(void)position:3int i;1char*color[5] = {"red","blue","yellow","g运行结果2char str[20];printf("Inputa color:");Input a color:purplescanf("%s", str);Not Foundfor(i= 0; i< 5; i++)if(strcmp(str,color[)==0)/*比较颜色是break;if(i < 5)printf("position:%din", i+1);elseprintf("Not Foundin");return o;7
11.1.1 程序解析 #include #include int main(void) { int i; char *color[5] = {“red”, ”blue”, ”yellow”, ”green”, ”black” }; char str[20]; printf(“Input a color:”); scanf(“%s”, str); for(i = 0; i < 5; i++) if(strcmp(str, color[i]) == 0) /* 比较颜色是否相同 */ break; if(i < 5) printf(“position:%d\n”, i+1); else printf(“Not Found\n”); return 0; } 运行结果1 Input a color:yellow position:3 运行结果2 Input a color:purple Not Found 指针数组
11.1.2指针数组的概念C语言中的数组可以是任何类型,如果数组的各个元素都是指针类型,用于存放内存地址,那么这个数组就是指针数组一维指针数组定义的一般格式为:类型名*数组名[数组长度]
11.1.2 指针数组的概念 ◼ C语言中的数组可以是任何类型,如果数组 的各个元素都是指针类型,用于存放内存 地址,那么这个数组就是指针数组。 ◼ 一维指针数组定义的一般格式为: 类型名 *数组名[数组长度]
11.1.2指针数组的概念 int a[10];口a是一个数组,它有10个元素口每个元素的类型都是整型 char *color[5];口color是一个数组,它有5个元素口每个元素的类型都是字符指针
11.1.2 指针数组的概念 ◼ int a[10]; a是一个数组,它有10个元素 每个元素的类型都是整型 ◼ char *color[5]; color是一个数组,它有5个元素 每个元素的类型都是字符指针
11.1.2指针数组的概念char*color[5] ={"red","blue","yellow","green","black"};口color是一个数组,它有5个元素对指针数组元素的口每个元素的类型都是字符指针操作和对同类型指口数组元素可以处理字符串针变量的操作相同对指针数组元素的操作:printf("%s%xln",color[],color[i]);colorrediocolor[0]color[1]blueloyellowocolor[2]color[3]greenloblacklocolor[4]
11.1.2 指针数组的概念 char *color[5] = {"red", "blue", "yellow", "green", "black" }; color是一个数组,它有5个元素 每个元素的类型都是字符指针 数组元素可以处理字符串 对指针数组元素的操作: printf("%s %x\n", color[i], color[i]); color color[0] red\0 color[1] blue\0 color[2] color[3] color[4] yellow\0 green\0 black\0 对指针数组元素的 操作和对同类型指 针变量的操作相同
11.1.2指针数组的概念color■继续执行:color[0] rediochar * tmp;color[1]bluelocolor[2]yellowotmp = color[0];color[3]greenlocolor[0] = color[4];color[4]blacklocolor[4] = tmp;color[0]与color[4]交换后的情况指针数组操作时:可以直接对数组元素进行赋值(地址值)和引用tmp=color[0];·也可以间接访问和操作数组元素所指向的单元内容strcpy(color[o],“purple");
◼ 继续执行: char * tmp; tmp = color[0]; color[0] = color[4]; color[4] = tmp; 11.1.2 指针数组的概念 color color[0] red\0 color[1] blue\0 color[2] color[3] color[4] yellow\0 green\0 black\0 color[0]与color[4]交换后的情况 指针数组操作时: •可以直接对数组元素进行赋值(地址值)和引用 tmp=color[0]; •也可以间接访问和操作数组元素所指向的单元内容 strcpy(color[0], “purple");
11.1.3指向指针的指针C语言中,指向指针的指针(二级指针)一般定义为:类型名**变量名int a = 10;int *p = &a;int **pp = &p;papp*p&p&a10*pp**pp
11.1.3 指向指针的指针 ◼ C语言中,指向指针的指针(二级指针)一般 定义为: 类型名 **变量名 int a = 10; int *p = &a; int **pp = &p; &a p a &p 10 pp *p *pp **pp