版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章指针编辑ppt直接访问与间接访问…3000300130023006内存030033004300530073008…程序中:intx;
int*p;x=5;p=&x;*p=30;
5p3000——直接访问——间接访问302编辑ppt为什么引入指针的概念指针的主要应用:指针作形参可以在子函数中修改实参变量的值利用指针作形参可以使子函数有多于一个的返回值3编辑ppt【例8-1】编写一个的子程序,子程序的功能为交换两个变量的值#include"stdio.h"voidswap(intx,inty);voidmain(void){ inta,b; printf("请输入交换的数值:"); scanf("%d%d",&a,&b); printf("交换前a=%d,b=%d\n",a,b); swap(a,b); printf("交换后a=%d,b=%d\n",a,b);}voidswap(intx,inty){inttemp;temp=x;x=y;y=temp;}单向值传递4编辑ppt【例8-1】编写一个的子程序,子程序的功能为交换两个变量的值(改进)#include<stdio.h>voidswap(int*x,int*y);voidmain(){inta,b;scanf("%d%d",&a,&b);printf("&a=%x,&b=%x\n",&a,&b);printf("调用前:a=%d,b=%d\n",a,b);swap(&a,&b);printf("调用后:a=%d,b=%d\n",a,b);}地址传递5编辑pptvoidswap(int*x,int*y){ intt;printf("\n-----swap-----\n");
printf("x=%x,y=%x\n",x,y);
t=*x;*x=*y;*y=t;printf("-----swap-----\n\n");}6编辑ppt说明在该例题中,我们利用指针作形参实现了修改实参变量的值。7编辑ppt例编写函数求出二维整型数组中元素的最大值及其下标号#include<stdio.h>#defineM3#defineN2intmaxarray(inta[M][N],intm,intn,int*pmaxi,int*pmaxj);voidmain(){inta[M][N]={1,2,3,4,5,6};intmax,maxi,maxj;max=maxarray(a,M,N,&maxi,&maxj);printf(“a[%d][%d]=%d”,max,maxi,maxj);}8编辑pptintmaxarray(inta[M][N],intm,intn,int*pmaxi,int*pmaxj){inti,j,max=a[0][0];for(i=0;i<m;i++)for(j=0;j<n;j++){if(max<a[i][j]){max=a[i][j];
*pmaxi=i;*pmaxj=j;}}returnmax;}9编辑ppt说明在这个例子中,我们利用指针作形参可以使子函数有多于一个的返回值10编辑ppt-11-a[i]*(a+i)p[i]*(p+i)数组元素表示法数组元素地址表示法&a[i]a+i&p[i]p+i指针与一维数组inta[10],*p=a;
11编辑ppt下标法main(){inta[10];i;for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++)printf("%d",a[i]);}数组名计算地址法main(){inta[10];i;for(i=0;i<10;i++)scanf("%d",a+i);for(i=0;i<10;i++)
printf("%d",*(a+i));}例:输入输出整型数组a的全部元素。(假有10个元素)指针法main(){inta[10],i,*p;p=&a[0];for(i=0;i<10;i++)scanf("%d",p+i);for(i=0;i<10;i++)
printf("%d",*(p+i));}12编辑ppt【例】写一个函数,将包含n个元素的数组进行排序voidmain()/*冒泡*/{intn=10,a[10]={3,2,4,5,6,8,9,25,21,10};inti,j,temp;for(i=0;i<n-1;i++)for(j=0;i<n-i-1;j++)if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}voidsort(inta[],intn)a[j]*(a+j)voidsort(int*a,intn)if(*(a+j)>*(a+j+1))
temp=*(a+j);*(a+j)=*(a+j+1);*(a+j+1)=temp;
13编辑ppt二维数组与指针例
inta[3][4];a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]a[2]a[1]a[0]即:a等价&a[0]a[0]等价&a[0][0]*a等价a[0]*a[0]等价a[0][0]a每个元素a[i]是由包含4个元素的一维数组组成把二维数组a理解成
由3个元素组成的一维数组14编辑ppt【例8-6】读以下程序,分析运行结果,理解二维数组指针的概念#include<stdio.h>voidmain(){inta[2][2]={1,2,3,4};inti;1515编辑pptfor(i=0;i<2;i++){printf("a+%d=%x",i,a+i);printf("\t*(a+%d)=%x",i,*(a+i));printf("\ta[%d]=%x",i,a[i]);printf("\t*(*(a+%d))=%d\n",i,*(*(a+i)));}for(i=0;i<2;i++){printf("a[0]+%d=%x",i,a[0]+i);printf("\t*(a[0]+%d)=%d\n",i,*(a[0]+i));}}a+0=13ff70*(a+0)=13ff70a[0]=13ff70*(*(a+0))=1a+1=13ff78*(a+1)=13ff78a[1]=13ff78*(*(a+1))=3a[0]+0=13ff70*(a[0]+0)=1a[0]+1=13ff74*(a[0]+1)=213ff7813ff7ca13ff7013fe74a[1][1]a[1][0]a[0][1]a[0][0]432116编辑ppt对于二维数组a[2][2],指针常量a和a[0]是不同类型的指针。通过运行结果我们可以看到:数组名a是指针常量,a的比例因子为1行
指向二维数组的第0行;a[0]也是指针常量,比例因子为1个元素
指向二维数组第0行第0个元素17*(a+0)和*(a+1)*(*(a+0))和*(*(a+1))*(a[0]+0)和*(a[0]+1)a[0]+2指向谁呢?a[1][1]有多少表示法呢?*(a[0]+3)、*(a[1]+1)*(*(a+1)+1)例
inta[2][2];a[0][0]a[0][1]a[1][0]a[1][1]a[0]a17编辑ppt例:求二维数组a[3][4]所有元素的和以及平均值。main(){inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};inti,sum=0,*p;
p=&a[0][0];
for(i=0;i<12;i++,p++)sum=sum+*p;printf(“sum=%d,aver=%f”,
sum,sum/12.0)}0a[0][0]1a[0][1]2a[0][2]3a[0][3]4a[1][0]5a[1][1]6a[1][2]7a[1][3]8a[2][0]9a[2][1]10a[2][2]11a[2][3]pppppppppppp18编辑ppt8.6指针与数组编程实例【例8-7】数列的中位数是数列中按照数值大小排在中间位置的数。例如:数列1,2,3,4,5的中位数为3。算法:先对数列排序,然后寻找排序序列的中位数。1919编辑ppt#include<stdio.h>voidsort(inta[],intn);voidmain(){intser[100]; inti,num;
printf("Inputlengthofserial:\n");
scanf("%d",&num);
printf("inputserialelements:\n");for(i=0;i<num;i++)scanf("%d",ser+i);
sort(ser,num);printf("Themedianofserialis%d\n",*(ser+num/2));}20编辑pptvoidsort(inta[],intn){inti,temp;int*p;for(i=0;i<n-1;i++)
for(p=a;p<a+n-i-1;p++)if(*p>*(p+1))
{temp=*p; *p=*(p+1); *(p+1)=temp;}}21Inputlengthofserial:5inputserialelements:1-3236715Themedianofserialis2321编辑ppt8.7指针与字符串字符串表示形式用字符数组实现main(){charstring[]=“IloveChina!”;printf(“%s\n”,string);printf(“%s\n”,string+7);}stringIstring[0]string[1]lstring[2]ostring[3]vstring[4]estring[5]string[6]Cstring[7]hstring[8]istring[9]nstring[10]astring[11]!string[12]\0string[13]string+7IloveChina!China!22编辑pptmain(){char*cp=“IloveChina!”;printf(“%s\n”,*cp);
printf(“%s\n”,cp);cp+=7;
printf(“%s\n”,cp);}cp用字符指针实现IloveChina!\0cpIIloveChina!China!23编辑pptffc0Iffc1loveChina!\0......stringcharstring[20]=“IloveChina!”;char*cp=“IloveChina!”;cp!anihCevolI存放常量的空间aa00aa0024编辑ppt字符型指针变量与字符数组charstr[20];与
char*cp;str由若干元素组成,每个元素放一个字符
cp只是一个指针变量,存放字符串首地址
charstr[20];str=“IloveChina!”;char*cp;cp=“IloveChina!”;str是地址常量;cp是地址变量cp接受键入字符串时,必须先开辟存储空间例charstr[10];scanf(“%s”,str);()而char*cp;scanf(“%s”,cp);()改为:char*cp,str[10];cp=str;scanf(“%s”,cp);()25编辑pptcharstr[]={“Hello!”};charstr[]=“Hello!”;
charstr[]={‘H’,‘e’,‘l’,‘l’,‘o’,‘!’};char*cp=“Hello”;inta[]={1,2,3,4,5};int*p={1,2,3,4,5};charstr[10],*cp;inta[10],*p;str=“Hello”;cp=“Hello!”;a={1,2,3,4,5};p={1,2,3,4,5};分析下列用法正确与否26编辑ppt【例8-9】写程序,判断一个单词是否为回文。回文指的是单词按从前到后与从后到前的顺序读都相同,例如“level”就是是一个回文单词。#include<stdio.h>#include<stdlib.h>#defineMAXLEN80voidmain(){char*str; intflag;
intpal(char*); if((str=(char*)
malloc(MAXLEN))==NULL){ printf("Memoryallocationerror!\n");exit(0);} 27编辑pptprintf("Inputaword:\n");scanf("%s",str);while(*str!='#'){flag=pal(str);if(flag)printf("%sisapalindrome!\n",str);elseprintf("%sisn'tapalindrome!\n",str);printf("Inputaword:\n");scanf("%s",str);}free(str);}28编辑pptintpal(char*str)/*判断回文*/{ char*p,*q;
p=str;q=str; while(*q!=‘\0’)/*p指向首部,q指向尾部*/ q++; q--; while(p<q)if(*p==*q){ p++;q--; } elsebreak; return(p>=q);}level\0pqpqpq29编辑pptC语言字符串操作的库函数1.字符串连接函数strcatchar*strcat(char*s1,char*s2){char*p,*q;p=s1;q=s2;while(*(p+1)!=0)p++;while(*q!=0){*p=*q;p++;q++;}*p=0;returns1;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新版二年级语文单元测试模拟卷题库
- 部门会议纪要标准格式与写法要点
- 房地产销售合同样本与解读
- 高职院校技能竞赛方案
- 电商平台产品质量监督管理办法
- 汽车维修站质量管理体系介绍
- 公路交通安全管理标准
- 水产企业薪酬管理体系方案
- 青海省中考英语历年试题分析汇编
- 工地高效施工方案(3篇)
- 换电柜维修培训课件
- 2025年教师高级水平能力测试题库(附答案)
- 空间转录组技术介绍
- 高净值客户资产配置方案
- 铁凝《没有纽扣的红衬衫》阅读答案
- 2025年南京市事业单位教师招聘考试体育学科专业知识试卷(夏季卷)
- 人教版八年级英语上册期末复习:完形填空15篇(含答案)
- 建筑消防设施介绍
- 图书馆志愿者培训课件
- 2025年特种设备作业人员考试压力管道安全操作试题
- 足细胞损伤与糖尿病肾病病理机制研究
评论
0/150
提交评论