c语言程序设计-第十章指针.ppt_第1页
c语言程序设计-第十章指针.ppt_第2页
c语言程序设计-第十章指针.ppt_第3页
c语言程序设计-第十章指针.ppt_第4页
c语言程序设计-第十章指针.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

重庆邮电大学计算机科学与技术学院冯潇fengxiao,指针及其应用,2019/11/25,主要内容,指针的概念;难点:对指针数据类型的理解用指针做函数参数;指针与一维数组数组名作为函数参数一维数组与一维数组元素指针的区别插入和删除数组元素,2019/11/25,重点、难点,对于指针概念的理解对于地址、直接寻址、间接寻址的理解对于指针作为函数参数的理解对于指针和数组关系的理解利用指针解决字符串问题,2019/11/25,变量再探,什么是变量?程序运行过程中其值会发生改变的量变量有3个特点;变量要占用一定的存储空间变量有名字程序运行过程中变量的值可能发生改变变量的实质在高级语言中,变量是对存储单元和内存地址的映射通过使用变量名定位存储单元的寻址方式叫直接寻址,2019/11/25,计算机内的存储部件,所有指令和数据都保存在内存里速度快,但是掉电即失可以随机访问内存中的每个字节都有唯一的一个地址地址按字节编号,按类型分配空间只要指明要访问的内存单元的地址,就可以立即访问到该单元地址是一个无符号整数,其字长一般与主机相同,内存(RandomAccessMemory)地址(Address),2019/11/25,寻址方式,直接(寻址)访问通过变量地址直接存取变量内容间接(寻址)访问通过指针变量来间接存取它所指向的变量,2019/11/25,什么是指针,专门存放地址数据的变量即为指针变量指针也是一种数据类型,也有与之相应的运算法则指针是不是地址?地址是一个无符号整数,其字长一般与主机相同指针是一个变量,完全符合变量的3个特点定义指针类型*指针变量名;“*”为指针类型说明符,2019/11/25,p=,2020,20,2019/11/25,inti,*p;p=,int*p;float*q;p=q;,inti;float*p;p=,int*p;p=100;,判断是真?是假?,指针变量只存放地址!,一个指针变量不能指向与其类型不同的变量!,我是真的,你猜对了吗?,应在类型相同的指针变量之间赋值,2019/11/25,指针运算,算术运算int*p,a10;p=a;p+;/*p的值增加多少?*/指针的加减运算是以其指向的类型的字节长度为单位的,6000600160026003600460056006,2019/11/25,指针运算,int*p,*q,a10;p=a;q=指针运算不能乱算一般只进行指针和整数的加减运算,同类型指针之间的减法运算其它运算,比如乘法、除法、浮点运算、指针之间的加法等,并无意义,所以也不支持,2019/11/25,指针变量与其它类型变量的对比,共性在内存中占据一定大小的存储单元先定义,后使用特殊性它的内容只能是地址,而不能是数据,TC下2B,VC下4B必须初始化后才能使用,否则指向不确定的存储单元,对该空间进行访问,将可能造成危险可参与的运算:加、减一个整数,自增、自减、关系、赋值只能指向同一基类型的变量,2019/11/25,为什么要引入指针?,铁杆C/C+程序员最挚爱的武器:指针C/C+的高效、高能主要来自于指针很多不可能的任务由指针完成指针的作用:为函数提供修改变量值的手段为C的动态内存分配系统提供支持为动态数据结构(如例链表、队列、二叉树等)提供支持可以改善某些子程序的效率,2019/11/25,交换两个数的值,voidswap(intx,inty)inttemp;temp=x;x=y;y=temp;,voidmain()inta,b;a=5;b=10;swap(a,b);printf(a=%d,b=%d,a,b);,2019/11/25,回顾,5,10,voidswap(intx,inty)inttemp;temp=x;x=y;y=temp;,voidmain()inta,b;a=5;b=10;swap(a,b);printf(a=%d,b=%d,a,b);,2019/11/25,用指针作为函数参数,2019/11/25,改进:,voidswap(int*x,int*y)inttemp;temp=*x;*x=*y;*y=temp;,voidmain()inta,b;a=15;b=8;swap(,2019/11/25,swap函数的几种错误形式(1/3),参数单向传递voidSwap(intx,inty)inttemp;temp=x;/*x,y为内部变量*/x=y;y=temp;,2019/11/25,swap函数的几种错误形式(1/2),参数单向传递voidSwap(int*p1,int*p2)int*p;p=p1;/*p1,p2为内部变量*/p1=p2;p2=p;,2019/11/25,swap函数的几种错误形式(2/2),指针p没有确切地址voidSwap(int*p1,int*p2)int*p;/*指针p未初始化*/*p=*p1;*p1=*p2;*p2=*p;,2019/11/25,几点说明,当指针作为函数的形参时,被调函数可以通过指针间接修改定义于主调函数中的数据。在实际编程中,我们经常利用到这一特性当指针作为函数的形式参数时,实参可以是地址、指针,也可以是数组名同样地,数组名也可以作为指针来充当函数的形式参数,2019/11/25,voidsort(doublea,intn)inti,j;doubletemp;for(i=0;iaj+1)temp=aj;aj=aj+1;aj+1=temp;,2019/11/25,在一个班级中找出最高分及其学号,voidFindMax(floatscore,longnum,intn,float*pMaxScore,long*pMaxNum)inti;*pMaxScore=score0;*pMaxNum=num0;for(i=1;i*pMaxScore)*pMaxScore=scorei;*pMaxNum=numi;,指针参数指定了存放这两个值的地址,2019/11/25,指针与数组,数组名就是一个指针只是不能修改这个指针的指向可以定义函数的参数为数组指针也可当作数组名使用int*p,a10;p=a;数组元素的几种等价引用形式ai*(a+i)pi*(p+i),60006001600260036004600560066007,a,a+1,a+2,60006001600260036004600560066007,a,p+,p+,2019/11/25,输入输出数组的全部元素,main()inta10;inti;for(i=0;i10;i+)scanf(%d,方法1:下标法,main()inta10;int*p;for(p=a;p(a+10);p+)scanf(%d,p);for(p=a;p(a+10);p+)printf(%d,*p);,方法2:指针法,2019/11/25,字符串与字符数组、字符指针,C语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理字符串一串以0结尾的字符字符数组每个元素都是字符类型的数组charstring100;字符指针指向字符类型的指针char*p;数组和指针可以等同看待,上面三者本质上是一回事,2019/11/25,字符指针变量与字符数组的区别,定义方法不同charstr10;char*ptr;赋值方法不同charstr10;ptr=”china”;/*错误*/strcpy(str,”china”);/*正确*/char*ptr;ptr=”china”;字符指针是变量,而数组名是地址常量,2019/11/25,使用字符指针的注意事项,字符指针变量必须有明确的指向,否则使用是危险的例如,输入字符串时char*a;scanf(%s,a);/*错误*/应为:char*a;charstr10;a=str;scanf(%s,a);/*正确*/,2019/11/25,例7.5:字符串拷贝用字符数组编程,voidMyStrcpy(chardstStr,charsrcStr)inti=0;while(srcStri!=0)dstStri=srcStri;i+;dstStri=0;,2019/11/25,voidMyStrcpy(char*dstStr,constchar*srcStr)while(*srcStr!=0)*dstStr=*srcStr;srcStr+;dstStr+;*dstStr=0;,当只允许函数访问地址内容,不允许修改时,可以把函数的指针参数定义为const,例7.5:字符串拷贝用字符指针编程,2019/11/25,习题6.13:编程实现strcat(),#includev

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论