




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章
指针进阶第1节指针数组及多级指针1程序解析2指针数组的概念3指向指针的指针4用指针数组处理多个字符串1程序解析【例1】已知奥运五环的5种颜色的英文单词按一定顺序排列,输入任意一个颜色的英文单词,从已有颜色中查找并输出该颜色的位置值,若没有找到,则输出“NotFound”。1程序解析#include<stdio.h>#include<string.h>intmain(void){inti;char*color[5]={“red”,”blue”,”yellow”,”green”,”black”};charstr[20];printf(“Inputacolor:”);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);elseprintf(“NotFound\n”);return0;}运行结果1Inputacolor:yellowposition:3运行结果2Inputacolor:purpleNotFound
指针数组2指针数组的概念C语言中的数组可以是任何类型,如果数组的各个元素都是指针类型,用于存放内存地址,那么这个数组就是指针数组。一维指针数组定义的一般格式为:类型名*数组名[数组长度]2指针数组的概念inta[10];a是一个数组,它有10个元素每个元素的类型都是整型char*color[5];color是一个数组,它有5个元素每个元素的类型都是字符指针2指针数组的概念char*color[5]={"red","blue","yellow","green","black"
};color是一个数组,它有5个元素每个元素的类型都是字符指针数组元素可以处理字符串对指针数组元素的操作:printf("%s%x\n",color[i],color[i]);对指针数组元素的操作和对同类型指针变量的操作相同
继续执行:char*tmp;tmp=color[0];color[0]=color[4];color[4]=tmp;
2指针数组的概念
color[0]与color[4]交换后的情况
指针数组操作时:可以直接对数组元素进行赋值(地址值)和引用tmp=color[0];也可以间接访问和操作数组元素所指向的单元内容
strcpy(color[0],“purple");3指向指针的指针C语言中,指向指针的指针(二级指针)一般定义为:
类型名**变量名
inta=10;
int*p=&a;int**pp=&p;&apa10&ppp*p*pp**pp&apaa10&pappa**ppa*pa&bpbb20&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;【例2】操作(1):ppt=ppb;ppb=ppa;ppa=ppt;操作(2):pt=pb;pb=pa;pa=pt;操作(3):t=b;b=a;a=t;二维数组的指针形式a[3][4]:看成是由a[0]、a[1]、a[2]组成的一维数组,而a[0]、a[1]、a[2]各自又是一个一维数组。也即二维数组是数组元素为一维数组的一维数组。a:第0行地址(行地址)a+i:第i行的地址*(a+i)/a[i]:第i行首元素的地址*(a+i)+j/a[i]+j:第i行第j个元素的地址*(*a+i)/a[i][0]:第i行首元素的值*((*a+i)+j)/a[i][j]:第i行首元素的值3指向指针的指针【例3】改写例1,用指向指针的指针实现。
#include<stdio.h>#include<string.h>intmain(void){inti;char*color[5]={“red”,”blue”,”yellow”,”green”,”black”};/char**pc;/*定义二级指针变量*/charstr[20];
pc=color;/*二级指针赋值*/printf(“Inputacolor:”);scanf(“%s”,str);for(i=0;i<5;i++)if(strcmp(str,*(pc+i))==0)/*比较颜色是否相同*/break;if(i<5)printf(“position:%d\n”,i+1);elseprintf(“NotFound\n”);return0;}3指向指针的指针指向指针的指针使用指向指针的指针操作数据3指向指针的指针【例3】改写例1,用指向指针的指针实现。
pccolor&color[0]*pccolor[0]*(pc+i)color[i]**pc*(*pc)*color[0]:‘r’1.指针数组与二维数组二维字符数组charccolor[][7]={"red","blue","yellow","green",“black"};4用指针数组处理多个字符串使用指针数组更节省内存空间指针数组char*pcolor[]={"red","blue","yellow","green",“black"};4用指针数组处理多个字符串2.用指针数组操作多个字符串【例4】将5个字符串从小到大排序后输出。voidmain(){inti;inta[5]={6,5,2,8,1};
voidfsort(inta[],intn);
fsort(a,5);
for(i=0;i<5;i++)printf("%d",a[i]);}#include<string.h>voidmain(){inti;char
*pcolor[]={“red”,”blue”,”yellow”,”green”,”black”};
voidfsort(char*color[],intn);
fsort(pcolor,5);
for(i=0;i<5;i++)printf("%s",pcolor[i]);}4用指针数组处理多个字符串voidfsort(inta[],intn){intk,j;inttemp;for(k=1;k<n;k++)for(j=0;j<n-k;j++)if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}voidfsort(char*color[],intn){intk,j;char*temp;for(k=1;k<n;k++)for(j=0;j<n-k;j++)
if(strcmp(color[j],color[j+1])>0){temp=color[j];color[j]=color[j+1];color[j+1]=temp;}}排序前排序后4用指针数组处理多个字符串例5解密藏头诗。所谓藏头诗,就是将一首诗每一句的第一个字连起来,所组成的内容就是该诗的真正含义。编写程序,输出一首藏头诗的真实含义。
一叶轻舟向东流,
帆梢轻握杨柳手,
风纤碧波微起舞,
顺水任从雅客悠。4用指针数组处理多个字符串#include<stdio.h>char*change(chars[][20]);intmain(void){inti;char*poem[4]={"一叶轻舟向东流,","帆梢轻握杨柳手,","风纤碧波微起舞,","顺水任从雅客悠。"};/*指针数组初始化*/charmean[10];for(i=0;i<4;i++){/*每行取第1个汉字存入mean*/
mean[2*i]=*(poem[i]);mean[2*i+1]=*(poem[i]+1);}
mean[2*i]=’\0’;
printf("%s\n",mean);/*输出结果*/return0;}4用指针数组处理多个字符串4用指针数组处理多个字符串3.动态输入多个字符串例6输入一些有关颜色的单词,每行一个,以#作为输入结束标志,再按输入的相反次序输出这些单词。其中单词数小于20,每个单词不超过15个字母(用动态分配内存的方法处理多个字符串的输入)。#include<stdio.h>#include<stdlib.h>#include<string.h>intmain(void){inti,n=0;char*color[20],str[15];scanf("%s",str);while(str[0]!='#'){
color[n]=(char*)malloc(sizeof(char)*(strlen(str)+1));/*动态分配*/
strcpy(color[n],
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 绿色能源技术研发合作合同
- 医疗器械代理注册合同书
- 正式借款合同
- 城市绿化项目实施与验收合同
- 节电小贴士(教学设计)-2023-2024学年四年级下册综合实践活动沪科黔科版
- 第21课《庄子二则-北冥有鱼》教学设计 2023-2024学年统编版语文八年级下册
- 社区团购仓储租赁协议
- 第5课计算机的资源管理 教学设计
- 律师事务所劳动仲裁合同8篇
- 无产权房屋买卖合同范本5篇
- 农业托管合同范例
- 食品中阿维菌素等55种农药最大残留限量
- 保洁部消杀培训
- 口服轮状疫苗知识课件
- 中国脑小血管病诊治指南2023版
- 中国聚乙烯催化剂行业发展状况及需求规模预测研究报告(2024-2030版)
- 新能源汽车驱动电机及控制系统检修课件 学习情境4:电的转换
- 车辆实际使用权协议书范文模板
- 新版加油站全员安全生产责任制
- 脑出血课件完整版本
- 凉山州小学数学教师业务素质考试试题(真题+训练)
评论
0/150
提交评论