收藏 分销(赏)

C语言中的指针.pptx

上传人:人****来 文档编号:9460115 上传时间:2025-03-27 格式:PPTX 页数:19 大小:141.16KB
下载 相关 举报
C语言中的指针.pptx_第1页
第1页 / 共19页
C语言中的指针.pptx_第2页
第2页 / 共19页
点击查看更多>>
资源描述
单击以编辑,母版标题样式,单击以编辑母版文本样式,第二级,第三级,第四级,第五级,#,重点:,1,、指针的概念;,2,、指针变量的概念;,3,、指针变量的定义及引用;,4,、指针变量作为函数的参数;,难点:,指针变量作为函数的参数,10.1,指针的概念,一、内存的访问方式,1,、,直接访问,(通过变量名对内存单元进行存取操作。),2000,2002,2004,i,j,k,3,6,9,:,内存用户数据区,:,:,如:,i=2,j=6,k=9,printf(,“,%d,”,i);,该输出语句是这样执行的,:,根据变量名与地址的对应关系(该关系在编译时确定),找到变量的地址,2000,,然后将从,2000,开始的两个字节的内容(即,3,)取出后输出。,10.1,指针的概念,2000,2002,2004,3010,i,j,k,i_p,3,6,9,2000,:,内存用户数据区,:,:,2,、,间接访问,将变量,i,的地址存放在另一个变量中。,假设变量,i_p,用来存放整型变量的地址,它被分配,3010,、,3011,两个字节,可用下例语句将,i,的地址存放到,i_p,中。,i_p=&i,;即,i-p,中的的值为,2000,此时,要存取变量的值,可以先找到存放,“,i,”,地址的变量,i_p,,从中取出,i,的地址(,2000,),然后到,2000,,,2001,字节取出,i,的值,3,。,两个概念:,(,1,)指针即地址,一个变量的地址称为该变量的指针,。通过变量的指针能够找到该变量。,(,2,)指针变量,专门用于存储其它变量地址的变量,指针变量,i_p,的值就是变量,i,的地址。,10.1,指针的概念,变量的,指针,就是变量的地址,存放变量地址的变量就是,指针变量,。为表示指针变量和它指向的变量之间的关系,用,指针运算符,“,*,”,表示。,即,:*,(,i_p,)就是,i_p,所指向的变量。,10.2,变量的,指针,和指向变量的,指针变量,2000,3,i_p,*(i_p),i,因此,下面两个语句的作用相同:,i=3;/*,将,3,直接赋给变量,i*/,i_p=/*,使,i_p,指向,i*/,*i_p=3;/*,将,3,赋给指针变量,i_p,所指向的变量*,/,10.2,变量的,指针,和指向变量的,指针变量,1,、指针变量的定义,一般形式:,类型标识符,*,变量名,如:,int *p1;char *p2;float *p3;,说明:,*,表示该变量为指针型变量,指针变量名为,p1,p2,p3,定义指针变量时必须指定基类型。它表示指针变量中存放的地址所指向的是什么类型的数据。,给指针变量赋值:,如:,p1=&i,(将,i,的地址赋给,p1,),注:一般不直接赋数值,2,、指针变量的引用,用指针变量对变量赋值:,如:,int i,j,*p;,p=,注意:,p,是地址变量,而*,p,是非地址变量,与,i,是一回事。,“*”:为指针运算符或叫指向运算符、间接运算符。,定义后,p=&I,后,*p=3,后,I,j,p,:,:,:,:,1000,1002,1004,I,j,p,1000,1002,1004,I,j,p,1000,1002,1004,I,j,p,1000,3,1000,1000,1002,1004,j=*p+2,后,3,5,1000,例,10.1,通过指针变量访问整型变量,main(),int a,,,b;,int *pointer_1,*pointer_2,;,a,100,;,b=10,;,pointer_1,&a,;*把变量,a,的地址赋给,pointer_1*,pointer_2=&b,;*把变量,b,的地址赋给,pointer_2*,printf (”,d,dn”,a,b);,printf(”,d,dn”,*pointer_1,*pointer_2);,*pointer_1=&a,对吗?,运行结果为:,100,10,100,10,关于运算符,&,和*的几点说明:,(,1,)结合性,&,和*两运算符的优先级相同,但结合方向为,自右向左,如:,int a,b,*p1,*p2;,p1=,&*p1,的含义?,&*p1,相当于,&(*p1),,,等于&(*,p1)=&(a)=&a=p1,*&a,的含义?,*,&a,相当于,*,(&a)=*(p1)=a,(2)优先级 处于第二位,(,见附录,),(3),自增自减运算,如:,int a,b,*p;,p=,(*p)+,:,相当于,a+,,,a=4,*p+,:,相当于,*(,p+),先求*,P,的值(为,3,),然后,P,再,+,,若,p,原为,1000,则,p+,为,1002,,即,P,不再指向,a,了。,若,float a,*p;,p=,当,p,为,1000,则,p+,为,1004,例,10.2,输入,a,和,b,两个整数,按先大后小的顺序输出,a,和,b,。,main,(),int*p1,*p2,*p,a,b,;,scanf,(,d,d“,&a,&b,);,p1=,if (ab),p=p1;pl=p2;p2=p;,printf,(,na=,d,b=,dn”,a,b,);,printf,(,max=,d,min=,dn“,*pl,*p2,);,运行情况如下:输入,5,,,9,回车,输出结果?,a,5,,,b,9,max,9,,,min,5,交换地址(指针变量),使,p1,指向大数,b,,而变量,a,、,b,未变。,&a,&b,5,9,&b,5,&a,9,p1 a,p2 b,p,p,p1 a,p2 b,3,、指针变量作为函数参数,功能:将一个变量的地址传送到另一函数中,实参和形参均用指针。,例,10,3,即对输入的两个整数按大小顺序输出(用函数处理)。,运行情况如下:,输入:,5,,,9,回车,输出:,9,,,5,void swap,(,int *p1,,*,p2,),int p,;,p=*p1;*p1=*p2;*p2=p;,void main,(),int a,b;,int *pointer_1,*pointer_2,;,scanf(,d,,,,,pointer_1,&a,;,pointer_2,b;,if,(,a,b,),swap,(,pointer_1,pointer_2,);,printf,(,n,d,,,dna,,,b,);,函数调用过程,下面例子能不能正确交换数据?,void swap,(,pl,,,p2,),int *p1,,*,p2,;,int*p,;,p,pl,;,p1=p2;p2,p;,void main,(),int a,,,b;,int *pointer_1,,*,pointer_2,;,scanf,(”,d,d,,,&a,,,b),;,pointer_l=&a,;,pointer_2=,b,;,if,(,a,b,),swap,(,pointer_ l,,,pointer_2,);,printf,(”,n,d,,,dn”,,*,pointer_1,*pointer_2,);,出错的原因是参量不是双向传递。,&a,&b,5,9,&a,&b,5,9,&b,5,&b,5,&a,9,&a,9,Pointer_1 a p1 a p1 a pointer_1 a,pointer_2 b p2 b p2 b pointer_2 b,(a)(b)(c)(d),&a,&b,如果想通过函数调用得到,n,个要改变的值,可以用如下方法:,在主调函数中设,n,个变量,用,n,个指针变量指向他们;,然后,将指针变量作实参,,将这,n,个变量的地址传给所调用的函数的形参,通过形参指针变量,改变,该,n,个变量的值,;,主调函数中就可以使用这些改变了值的变量。,例,10,4,输入,a,、,b,、,c,三个整数,按大小顺序输出。(,P228,),swap (,int *,pt1,int *,pt2),int p;,p=*pt1;,*pt1=*pt2;,*pt2=p;,exchange (,int *,q1,int *,q2,int *,q3),if(*q1*q2)swap(q1,q2);,if(*q1*q3)swap(q1,q3);,if(*q2*q3)swap(q2,q3);,运行情况如下:,输入:,9,,,0,,,10,回车,输出:,10,,,9,,,0,main(),int a,b,c,*p1,*p2,*p3;,scanf(%d%d%d,p1=,exchange(p1,p2,p3);,printf(n%d,%d,%dn,a,b,c);,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服