《C语言程序设计案例教程》课件7.2指针与数组.pptx

上传人(卖家):momomo 文档编号:4611242 上传时间:2022-12-25 格式:PPTX 页数:20 大小:4.35MB
下载 相关 举报
《C语言程序设计案例教程》课件7.2指针与数组.pptx_第1页
第1页 / 共20页
《C语言程序设计案例教程》课件7.2指针与数组.pptx_第2页
第2页 / 共20页
《C语言程序设计案例教程》课件7.2指针与数组.pptx_第3页
第3页 / 共20页
《C语言程序设计案例教程》课件7.2指针与数组.pptx_第4页
第4页 / 共20页
《C语言程序设计案例教程》课件7.2指针与数组.pptx_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、CONTENTS 目 录提出问题 引入新课自主学习 明确考点案例分析 交流提升仿真演练 体验探索提出问题 引入新课PART 01有一个指针变量指向一维数组的首地址,如果要让它逐步移向数组的最后一个元素的首地址,要怎么办?提出问题 引入新课思考自主学习 明确考点PART 02指针变量进行的算术运算只有以下三种情况是合法的,即1)指针变量可与一个整数相加。用到的运算符有+、+和+=。2)指针变量可与一个整数相减。用到的运算符有-和-。3)两个同类型的指针变量可以相减。考点一:指针的算术运算例如:假设pi为整型指针变量,当前值为2000,一个整数在内存中占两个字节。则执行语句pi+;后,pi的值是2

2、002,不是2001。每次自增1之后,pi都指向下一个相邻的整数。同理,当pi的值为2000时,表达式pi-使pi的值变为1998。由此可知:(1)指针的算术运算实质是地址运算;(2)运算方式:是通过移动指针进行算术运算;(3)移动指针:是以它指向的数据类型所占的字节数为移动单位。对指针变量进行加上或减去一个整数、或通过赋值运算,使指针变量指向相邻的存储单元。(4)指针移动只有当指针指向一串连续的存储单元时,指针的移动才有意义。才可以将一个指针变量与一个整数n做加减运算。(5)两指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数。注:两个指针变量不能进行加法运算,因为没有实际含义。考

3、点一:指针的算术运算指针是整数,所以可加上或减去一个整数n。设pa是指向数组a的指针变量,则以下运算都可以:pa+n,pa-n,pa+,+pa,pa-,-pa 指针变量加或减一个整数n的意义为:把指针指向的当前位置(指向某数组元素)向前或向后移动n个位置。数组指针变量向前或向后移动一个位置表示指针变量指向下一个数据元素的首地址。而不是在原地址基础上加1。考点一:指针的算术运算例如:指针p没有移动之前:数组a:a1a2a3a4a5a6指针向后移动一个位置:数组a:a1a2a3 a4a5a6 pp注意:(1)指针变量的加减运算只能对数组指针变量进行,对指向其它类型变量的指针变量作加减运算是毫无意义

4、的。(2)当指针变量加上或减去一个整数n时,并不是单纯地加上或减去n,而是加上或减去某个数字的n倍。例如,表达式pi=pi+12;使pi指向当前位置后的第12个元素。如果指针变量pi的基本类型为int,执行该语句前的值为3000,则执行完这个语句后,pi的值为3000+12*2。(3)当两个指针变量指向同一数组时,这两个指针变量可以相减。设float型指针变量pf1和pf2指向同一float数组,则语句int m=pf2-pf1;的作用是把pf1到pf2之间的数组元素的个数赋给m。如果pf1包含地址3000,pf2包含地址3024,则m的值为6。因为每个float型数组元素在内存中占用4个字节

5、,从地址值3000到3024共有24个字节,所以m=24/4,即m=6。(4)要特别注意,不能对指针变量进行乘、除运算,不能将两个指针变量相加,不能按位移(左移、右移),不能按位与,也不能对指针变量加、减单精度浮点数或双精度浮点数。考点一:指针的算术运算考点二:指针的比较两个指针的比较运算一般用于两个或多个指针变量指向同一目标的情况。两个指针的比较运算常用于数组,以判断两个指针所指数组元素位置的先后。若pipj,则pi所指的地址在pj所指的地址之后。pj所指元素序号小于pi所指元素序号;(pi处于上界)。若pi=pj,则pi所指的地址与pj所指的地址相同。或指向同一数组元素。若pi!=pj,则

6、pi所指的地址与pj所指的地址不同。考点三:传递指针(赋值运算)把一个指针变量的值赋予指向相同类型变量的另一个指针变量。如:int a,*pa=&a,*pb;pb=pa;/*把a的地址赋予指针变量pb*/注:1、指针变量除0外不可以直接把常数值赋给指针变量。2、可以给指针变量赋一个NULL值。考点四:取数组地址把数组的首地址赋予指向数组的指针变量。例如:int a6,*pa;pa=a;(数组名表示数组的首地址,故可赋予指向数组的指针变量pa)也可写为:pa=&a0;/*数组第一个元素的地址也是整个数组的首地址,也可赋予pa*/也可采取初始化赋值的方法:int a6,*pa=a;考点五:取字符串

7、首地址 把字符串的首地址赋予指向字符类型的指针变量。例如:char*pc;pc=Hello;或用初始化赋值的方法写为:char*pc=Hello;注意,并不是把整个字符串装入指针变量,而是把存放该字符串的字符数组的首地址装入指针变量。考点六:去函数的入口地址 把函数的入口地址赋予指向函数的指针变量。例如:int(*pf1)();pf1=f1;/*f1为函数名*/案例分析 交流提升PART 03【例1】有以下程序运行后的输出结果是()main()int a10=1,2,3,4,5,6,7,8,9,10,*p=&a3,*q=p+2;printf(%dn,*p+*q);A)16 B)10C)8 D)

8、6【例2】有以下程序运行后的输出结果是()main()int a=2,4,6,8,10,y=0,x,*p;p=&a1;for(x=1;x3;x+)y+=px;printf(%dn,y);A)10 B)11 C)14 D)15【例3】有以下程序运行后的输出结果是()#include main()int a,b,c,d;int*he,*ch;a=8;b=2;he=&c;ch=&d;*he=a+b;*ch=a-b;printf(c=%d,d=%dn,c,d);仿真演练,体验探索PART 041、对于类型相同的指针变量,不能进行哪种运算?A)+B)-C)=D)=2、若有以下说明和语句,则p2-p1的值

9、为多少?int a10,*p1,*p2;p1=a;p2=&a5;A)5 B)6 C)10 D)非法3、已有定义int k=2,*ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是()。A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2)4、分析下列程序的运行结果是()main()int a,b,m=6,*p1=&k,*p2=m;a=p1=&m;b=(-1*p1)/(*p2)+7;printf(a=%dn,a);printf(b=%dn,b);6、若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是()A)p=q;B)*p=*q;C)n=*q;D)p=n;7、有以下程序运行后的输出结果是()main()int var,*p;var=100;*p=&var;var=*p+10;printf(%d,var);8、设有如下定义:main()int a5=0,1,2,3,4,*p1=&a1,*p2=&a4;printf(%d,p2-p1);printf(%d,*p2-*p1);5、有以下程序运行后的输出结果是()main()printf(%dn,NULL);A)0 B)1 C)-1 D)NULL没定义,出错

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

当前位置:首页 > 中职
版权提示 | 免责声明

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


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

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


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