lesson17数据的组织结构二指针概念.ppt_第1页
lesson17数据的组织结构二指针概念.ppt_第2页
lesson17数据的组织结构二指针概念.ppt_第3页
lesson17数据的组织结构二指针概念.ppt_第4页
lesson17数据的组织结构二指针概念.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

Lesson17数据的组织结构,学习目标:,1,掌握指针概念,引例,#includevoidswap(int*a,int*b)intt;t=*a;*a=*b;*b=t;return;intmain()intx,y;scanf(%d%d,分析,栈区,main,swap,x:1,y:4,调用swap,a,b,执行:t=*a;*a=*b;*b=t;,t,x:1,y:2,结论:通过a,b找到了main中的x和y,使其交换了!,内存,intx,y;,变量y,变量x,找到x,y的方法:,1、通过名字找,2、通过位置找,如在电影院找人,程序中:inti;floatk;,内存中每个字节有一个编号-地址,.,2000,2001,2002,2005,内存,0,2003,i,k,编译或函数调用时为其分配内存单元,2004,2006,2007,变量地址:变量所占字节的第一个地址,变量i的地址是:2000变量k的地址是:2004,如何得到变量的地址?,printf(“x=%d,lesson17_01.c,如何表示地址,指针类型指针类型是C语言提供的一种特殊的基本数据类型,表示变量的地址。指针类型变量中存放的不是待操作的数据,而是那些待操作数据(变量)的存储地址。,如何保存变量的地址?,定义相应变量保存-如果一个变量用来保存另一个变量的地址,叫指针变量,定义方法:类型名*指针变量名,例:int*pi;float*pf;,该变量可以放哪种类型的变量的地址,标志,表示后面的变量是一个指针变量,变量的名字,必须是合法标志符,使用指针变量保存变量的地址,intx=0,y=7;int*p;p=,2000,2000,p指向变量x,所以地址也叫做指针!,访问变量的第二种方法,*运算符:指针所指向的变量,例2:观察程序:#includeintmain()intx=0;int*p;p=,*p就是x,lesson17_02.c,指针与指针所指变量的关系,例如:int*intptr,a;intptr=,指针与结构体变量的关系,structpoint_typeintx;/*x坐标*/inty;/*y坐标*/;,structpoint_type*p;/*定义结构体类型的指针*/,structpoint_typepoint;/*定义结构体的变量*/point.x=2;point.y=5;p=,p,通过指针访问结构体变量的方法,structpoint_type*p;/*定义结构体类型的指针*/,structpoint_typepoint;/*定义结构体的变量*/p=,2,5,point,p,方法1:(*p).x=10;,方法2:p-y=20;,指针的应用,例3:从键盘输入两个数,按从大到小输出,第一种方法:,#includeintmain()inta,b,t;scanf(“%d%d”,1,a,b,2,2,1,lesson17_03_1.c,第二种方法:,#includeintmain()inta,b;int*p1,*p2;scanf(“%d%d”,1,a,b,2,1,p1,p2,2,lesson17_03_2.c,使用指针的方法,从键盘输入三个数,输出最大值,指针的基本操作指针的初始化int*ptr1=NULL是一个特殊的值,是在stdio.h文件中定义的一个符号常量#defineNULL0它表示目前指针没有指向任何变量,通常将这种状态称为“空”指针。,指针的基本操作指针的赋值ptr2=ptr1;可以将一个指针赋给另一个基类型相同的指针,其含义是两个指针在同一时刻指向同一个变量。,指针的比较用来判断两个指针在同一时刻是否指向同一个变量,或者判断某个指针是否为“空”。例如if(ptr1=NULL)return;指针的加减指针和指针可以相减ptr1-ptr2;指针可以和整数相加、减ptr1+1;在利用指针访问数组元素的时候,应用这种操作移动指针十分便捷。,NULL是已经定义好的一个常量就是0,数组名的含义,inta10,各元素地址:,数组名首元素的地址,a表示a0的地址:即a的值为2000,例4:观察程序结果,#includeintmain()inta10=1,2,3,4,5,6,7,8,9,0;printf(“a=%d,lesson17_04.c,inta10;int*p;,p=a;,p,2000,等价,P是指针变量,可以保存变量的地址,inta10;int*p;,p=a;,p,p=p+1;,2000,2004,p=p+1;不是使p的值加1而是使其指向下一个变量(元素),inta10;int*p;,p=a;,p,2000,2004,ai的几种表示方法:ai*(a+i)pi*(p+i),利用指针对数组元素进行操作假设有定义:intiarray20,*ptr;ptr=iarray将数组iarray的内容显示输出方法1、for(ptr=iarray,i=0;i20;i+)printf(“%d“,*(ptr+i);方法2、for(ptr=iarray;ptriarray+20;ptr+)printf(“%d“,*ptr);,利用指针对数组元素进行操作假设有定义:intiarray20,*ptr;ptr=iarray将数组iarray的内容显示输出方法3、for(i=0;i20;i+)printf(“%d“,*(iarray+i);方法4、for(ptr=iarray,i=0;i20;i+)printf(“%d“,ptri);,例5:从键盘上输入10个数,并输出,#includeintmain()inta10;inti,*p=a;for(i=0;i10;i+)scanf(“%d”,p+i);for(i=0;i10;i+)printf(“%6d”,*(p+i);return0;,le

温馨提示

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

评论

0/150

提交评论