资源描述:
《[计算机软件及应用]c语言指针进阶》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第11章指针进阶7/16/20211本章要点指针数组和指向指针的指针是如何被定义和使用的?指针如何作为函数的返回值?指向函数的指针的意义是什么?什么是结构的递归定义,哪种应用需要这种定义方法?对链表这种数据结构,如何进行动态内存分配操作?如何建立单向链表并实现插入、删除以及查找操作?7/16/2021211.1布袋中的彩色球例1已知一个不透明的布袋里装有红、蓝、黄、绿、紫同样大小的圆球各一个,现从中一次抓出两个,问可能抓到的是什么颜色的球?7/16/20213程序解析#includeintmain(void)
2、{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",color[i],color[j]);}return0;}1redblue2redyellow3redgreen4redpurple5blueyellow6bluegreen7
3、bluepurple8yellowgreen9yellowpurple10greenpurple指针数组7/16/202142.指针数组的概念char*color[5];类型名*数组名[数组长度]inta[10];a是一个数组,它有10个元素每个元素的类型都是整型char*color[5];color是一个数组,它有5个元素每个元素的类型都是字符指针7/16/20215char*color[5]={"red","blue","yellow","green","purple"};color是一个数组,它有5个元素每个元素的类型都
4、是字符指针数组元素可以处理字符串对指针数组元素的操作相当于对同类型指针变量的操作printf("%10s%10s",color[i],color[j]);7/16/20216#includeintmain(void){inti;char*color[5]={"red","blue","yellow","green","purple"},*tmp;/*输出字符串的地址和内容*/(思考)for(i=0;i<5;i++)printf("%x,%s",color[i],color[i]);return0;}4
5、20064,red42005c,blue420054,yellow42004c,green420044,purplecolor[0]:purple,color[4]:red例2使用指针数组输出5种颜色的英文名称7/16/20217交换color[0]与color[4]的值7/16/202183.指向指针的指针(1)定义指向指针的指针(二级指针)类型名**变量名inta=10;int*p=&a;int**pp=&p;&apa10&ppp*p*pp**pp7/16/20219&apaa10&pappa**ppa*pa&bpbb2
6、0&pbppb**ppb*pbpaappa&a10&pb**ppb*pa&bpbb20&pappb**ppa*pbpaappa&b10&pb**ppa*pb&apbb20&pappb**ppb*papaappa&b20&pb**ppa*pb&apbb10&pappb**ppb*painta=10,b=20,t;int*pa=&a,*pb=&b,*pt;int**ppa=&pa,**ppb=&pb,**ppt;例11-4操作(1):ppt=ppb;ppb=ppa;ppa=ppt;操作(2):pt=pb;pb=pa;pa=pt;操
7、作(3):t=b;b=a;a=t;7/16/202110例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",colo
8、r[i],color[j]);}return0;}指向指针的指针*(pc+i),*(pc+j)7/16/2021114.用指针数组处理多个字符串处理多个字符串二维字符数组charccolor[][7]={"red","blue","yellow","green","purpl