指针是C语言中的一个重要的概念课件.ppt

上传人(卖家):晟晟文业 文档编号:4681549 上传时间:2022-12-31 格式:PPT 页数:20 大小:104.38KB
下载 相关 举报
指针是C语言中的一个重要的概念课件.ppt_第1页
第1页 / 共20页
指针是C语言中的一个重要的概念课件.ppt_第2页
第2页 / 共20页
指针是C语言中的一个重要的概念课件.ppt_第3页
第3页 / 共20页
指针是C语言中的一个重要的概念课件.ppt_第4页
第4页 / 共20页
指针是C语言中的一个重要的概念课件.ppt_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、第十章第十章 指针指针指针是指针是C C语言中的一个重要的概念,也是语言中的一个重要的概念,也是c c语言的语言的一个重要特色。正确而灵活地运用它,可以有效地一个重要特色。正确而灵活地运用它,可以有效地表示复杂的数据结构;能方便地使用字符串;有效表示复杂的数据结构;能方便地使用字符串;有效而方便地使用数组;在调用函数时能得到多个的值;而方便地使用数组;在调用函数时能得到多个的值;能直接处理内存地址等,这对设计系统软件是很必能直接处理内存地址等,这对设计系统软件是很必要的。掌握指针的应用,可以使程序简洁、紧凑、要的。掌握指针的应用,可以使程序简洁、紧凑、高效。每一个学习和使用高效。每一个学习和使

2、用C C语言的人,都应当深入地语言的人,都应当深入地学习和掌握指针。可以说,学习和掌握指针。可以说,不掌握指针就不掌握不掌握指针就不掌握C C语语言的精华言的精华。重点:重点:1 1、指针的概念;、指针的概念;2 2、指针变量的概念;、指针变量的概念;3 3、指针变量的定义及引用;、指针变量的定义及引用;4 4、指针变量作为函数的参数;、指针变量作为函数的参数;难点:难点:指针变量作为函数的参数指针变量作为函数的参数10.1 10.1 指针的概念指针的概念一、内存的访问方式一、内存的访问方式1 1、直接访问直接访问(通过变量名对内存单元进(通过变量名对内存单元进行存取操作。)行存取操作。)20

3、0020022004ijk 3 6 9 :内存用户数据区:如:如:i=2,j=6,k=9 i=2,j=6,k=9 printf(“%d”,i);printf(“%d”,i);该输出语句是这样执行的该输出语句是这样执行的:根据变量名与地址的对应关系(该关系在根据变量名与地址的对应关系(该关系在编译时确定),找到变量的地址编译时确定),找到变量的地址20002000,然,然后将从后将从20002000开始的两个字节的内容(即开始的两个字节的内容(即3 3)取出后输出。取出后输出。10.1 10.1 指针的概念指针的概念2000200220043010ijki_p 3 6 92000 :内存用户数据

4、区:2 2、间接访问间接访问将变量将变量 i i的地址存放在另一个变量中。的地址存放在另一个变量中。假设变量假设变量i_pi_p用来存放整型变量的地址,用来存放整型变量的地址,它被分配它被分配30103010、30113011两个字节,可用下例两个字节,可用下例语句将语句将i i的地址存放到的地址存放到i_pi_p中。中。i_p=&i i_p=&i;即;即i-pi-p中的的值为中的的值为20002000此时,要存取变量的值,可以先找到此时,要存取变量的值,可以先找到存放存放“i”“i”地址的变量地址的变量i_pi_p,从中取出,从中取出i i的的地址(地址(20002000),然后到),然后到

5、20002000,20012001字节取字节取出出i i的值的值3 3。两个概念:两个概念:(1 1)指针)指针即地址即地址 一个变量的地址称为该变量的指针一个变量的地址称为该变量的指针。通过。通过变量的指针能够找到该变量。变量的指针能够找到该变量。(2 2)指针变量)指针变量专门用于存储其它变量专门用于存储其它变量地址的变量地址的变量指针变量指针变量i_pi_p的值就是变量的值就是变量i i的地址。的地址。10.1 10.1 指针的概念指针的概念变量的变量的指针指针就是变量的地址,就是变量的地址,存放变量地址的变量就是存放变量地址的变量就是指针变量指针变量。为表示指针变量和它指向的变量之为表

6、示指针变量和它指向的变量之间的关系,用间的关系,用指针运算符指针运算符“*”表表示。示。即即:*(i_pi_p)就是)就是i_pi_p所指向的所指向的变量。变量。10.2 10.2 变量的变量的指针指针和指向变量的和指向变量的指针变量指针变量20003i_p*(i_p)i因此,下面两个语句的作用相同:因此,下面两个语句的作用相同:i=3;i=3;/*将将3 3直接赋给变量直接赋给变量i i*/i_p=&i;/i_p=&i;/*使使i_pi_p指向指向i i*/*i_p=3;/i_p=3;/*将将3 3赋给指针变量赋给指针变量i_pi_p所指向的变量所指向的变量*/10.2 变量的变量的指针指针

7、和指向变量的和指向变量的指针变量指针变量1 1、指针变量的定义、指针变量的定义一般形式:一般形式:类型标识符类型标识符 *变量名变量名如:如:int int *p1;char p1;char *p2;float p2;float *p3;p3;说明:说明:*表示该变量为指针型变量,指针变量名为表示该变量为指针型变量,指针变量名为p1,p2,p3p1,p2,p31.1.定义指针变量时必须指定基类型。它表示指针定义指针变量时必须指定基类型。它表示指针变量中存放的地址所指向的是什么类型的数据。变量中存放的地址所指向的是什么类型的数据。u给指针变量赋值:给指针变量赋值:如:如:p1=&i p1=&i(

8、将(将i i的地址赋给的地址赋给p1p1)注:一般不直接赋数值注:一般不直接赋数值2 2、指针变量的引用、指针变量的引用用指针变量对变量赋值:用指针变量对变量赋值:如:如:int i,j,int i,j,*p;p;p=&i;p=&i;*p=3;j=p=3;j=*p+2;p+2;注意:注意:p p是地址变量,而是地址变量,而*p p 是非地址变量,与是非地址变量,与i i是一回事。是一回事。“*”:为指针运算符或叫指向运算符、间接运算符。:为指针运算符或叫指向运算符、间接运算符。定义后定义后p=&I后后*p=3后后Ijp:100010021004Ijp100010021004Ijp1000100

9、21004Ijp1000 31000100010021004j=*p+2 后后 3 51000例例10.1 通过指针变量访问整型变量通过指针变量访问整型变量 main()int a,b;int *pointer_1,*pointer_2;a100;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对吗?对吗?运行结果为:运行结果为:10

10、0,10 100,10 100,10 100,10关于运算符关于运算符&和和 *的几点说明:的几点说明:(1 1)结合性)结合性&和和*两运算符的优先级相同,但结合方向为两运算符的优先级相同,但结合方向为自右向左自右向左如:如:int a,b,int a,b,*p1,p1,*p2;p2;p1=&a;p2=&b;p1=&a;p2=&b;&*p1p1的含义?的含义?&*p1p1相当于相当于&(&(*p1)p1),等于等于&(&(*p1)=&(a)=&a=p1p1)=&(a)=&a=p1*&a&a的含义?的含义?*&a&a相当于相当于*(&a)=(&a)=*(p1)=a(p1)=a(2 2)优先级)

11、优先级 处于第二位处于第二位(见附录见附录)(3)(3)自增自减运算自增自减运算如:如:int a,b,int a,b,*p;p;p=&a;a=3;b=5;p=&a;a=3;b=5;(*p)+p)+:相当于相当于 a+a+,a=4a=4*p+p+:相当于相当于*(p+)(p+),先求先求*P P的值(为的值(为3 3),然),然后后P P再再+,若,若p p原为原为1000,1000,则则p+p+为为10021002,即,即P P不再不再指向指向a a了。了。若若float a,float a,*p;p;p=&a;p=&a;当当p p为为1000,1000,则则p+p+为为10041004例例

12、10.2 10.2 输入输入a a和和b b两个整数,按先大后小的顺序输出两个整数,按先大后小的顺序输出a a和和b b。main ()int*p1,*p2,*p,a,b;scanf (d,d“,&a,&b););p1=&al;p2=&b;if (ab)p=p1;pl=p2;p2=p;printf (na=d,b=dn”,a,b););printf(max=d,min=dn“,*pl,*p2););运行情况如下:运行情况如下:输入输入 5 5,9 9 回车,输出结果?回车,输出结果?a5,b9max9,min5交换地址(指针变量),使交换地址(指针变量),使p1p1指向大数指向大数b b,而变

13、量,而变量a a、b b未变。未变。&a&b59&b5&a9 p1 a p2 bppp1 ap2 b3 3、指针变量作为函数参数、指针变量作为函数参数功能:将一个变量的地址传送到另一函数中,实参和形参功能:将一个变量的地址传送到另一函数中,实参和形参均用指针。均用指针。例例10103 3 即对输入的两个整数按大小顺序输出(用函数处即对输入的两个整数按大小顺序输出(用函数处理)。理)。运行情况如下:运行情况如下:输入:输入:5 5,9 9 回车回车 输出:输出:9 9,5 5void swap(int *p1,*p2)int p;p=*p1;*p1=*p2;*p2=p;void main()()

14、int a,b;int *pointer_1,*pointer_2;scanf(d,&a,&b);pointer_1&a;pointer_2b;if(ab)swap (pointer_1,pointer_2););printf (nd,dna,b););函数调用过程下面例子能不能正确交换数据?下面例子能不能正确交换数据?void swap (pl,p2)int *p1,*p2;int*p;ppl;p1=p2;p2p;void main()()int a,b;int *pointer_1,*pointer_2;scanf (”dd,&a,b);pointer_l=&a;pointer_2=b;i

15、f(ab)swap(pointer_ l ,pointer_2););printf(”nd,dn”,*pointer_1,*pointer_2););出错的原因是参量不是双向传递。出错的原因是参量不是双向传递。&a&b59&a&b59&b5&b5&a9&a9Pointer_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 n个指

16、针变量指向个指针变量指向他们;他们;然后然后将指针变量作实参将指针变量作实参,将这,将这n n个变量的地址传个变量的地址传给所调用的函数的形参给所调用的函数的形参 通过形参指针变量,改变通过形参指针变量,改变该该n n个变量的值个变量的值;主调函数中就可以使用这些改变了值的变量。主调函数中就可以使用这些改变了值的变量。例例10104 4 输入输入a a、b b、c c三个整数,按大小顺序输出。(三个整数,按大小顺序输出。(P228P228)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 9,0 0,10 10 回车回车输出:输出:1010,9 9,0 0main()int a,b,c,*p1,*p2,*p3;scanf(%d%d%d,&a,&b,&c);p1=&a;p2=&b;p3=&c;exchange(p1,p2,p3);printf(n%d,%d,%dn,a,b,c);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(指针是C语言中的一个重要的概念课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|