ImageVerifierCode 换一换
格式:PPT , 页数:19 ,大小:1.03MB ,
资源ID:14209488      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/14209488.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言全国计算机二级等级考试教程d第八章地址和指针章节带习题PPT课件下载推荐.ppt)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言全国计算机二级等级考试教程d第八章地址和指针章节带习题PPT课件下载推荐.ppt

1、,31012,当访问变量时,为“直接存取(直接访问)”。我们也可以通过指针变量间接的访问该地址中原来的值。此时称为“间接存取(间接访问)”。,8.2 指针变量的定义和指针变量的基类型,定义指针变量的一般形式如下:,类型名*指针变量名;或类型名*指针变量名1,*指针变量名2,;,例如:int*pi;int*pj,*pa;,1.pi,pj,pa都是变量,不过都是指针变量,定义时在普通变量名的左边加上星号就行了。,说明:,pi,pj,pa三个指针变量的类型为整型,说明三个变量中只能存放int类型变量的地址。这时我们称int是指针变量pi,pj,pa的基类型。,如:double*pd;char*s1,

2、*s2;,pd的基类型为double类型,在指针变量pd中,只能存放double类型变量的地址。,s1和s2的基类型为char类型,在指针变量s1和s2中,只能存放char类型变量的地址。,8.3 给指针变量赋值,8.3.1 给指针变量赋地址值,例如:int k,*q,*p;,/*k为整型变量,q和p都是指针变量。*/,q,p,k,k=1;,/*给普通变量赋值*/,整型变量k只被能赋予整型值,赋值时直接赋值就可以了,而指针变量只能被赋予地址值,如下是把整型变量k的地址赋值给指针变量q。,q=,&是用来求出变量的地址。,1,&k,知识点:,由于把变量k的地址赋予了指针变量q,q中现在存放的就是变

3、量k的地址,这时可以说:q指向了变量k。,指针变量之间也可以进行赋值:p=q;,&k,当我们输出变量k,q,p时,输出的结果为;,112450521245052,8.3 给指针变量赋值,8.3.2 给指针变量赋“空”值,除了给指针变量赋地址值之外,还可以给指针变量赋一个特殊的值,该值为“空”值。,int*p;p=NULL;p=0;,注意,此时,指针变量p中不是没有值,而是有一个“空”值。,8.4 对指针变量的操作,8.4.1 通过指针来引用一个存储单元,#include main()int k,*q,*p;k=1;q=,112450521245052,输出时,变量k为1,而指针变量q和p则为变

4、量k的地址。,#include main()int k,*q,*p;q=,1,k,&k,q,&k,p,111,访问时,在指针变量前在*(间接访问运算符)则表示访问该地址中原来的值。,8.4 对指针变量的操作,8.4.1 通过指针来引用一个存储单元,假定有以下定义和语句:,int*p,i=10,j;p=,/*定义了三个变量*/*取变量i的地址赋给指针变量p*/*间接访问指针变量中的值10赋给变量j*/,p,10,i,j,10,j=i;,间接访问运算符*是一个单目运算符,必须出现在运算对象的左边。其运算对象可以是存放地址的指针变量,也可以是地址。,j=*(,j=*,扩展知识:,j=*p+1;,10

5、,j,11,j,int*p,k=0;p=,p,k,*p=100;,100,0,k=100;,*p=*p+1;,k=k+1;,101,*p+=1;或+*p;或(*p)+;,k+=1;或+k;或 k+;,若有以下定义和语句:int*p,*s,k=20;s=,p,s,20,k,8.4 对指针变量的操作,8.4.1 通过指针来引用一个存储单元,程序举例:,例8.1 用指针指向两个变量,通过指针运算选出值最小的那个数。,#include main()int a,b,min,*pa,*pb,*pmin;pa=,pa,pb,pmin,a,b,min,/*输入的值依次放入pa、pb所指存储单元中*/,scan

6、f(“%d%d”,比如输入:,41 32,41,32,a=41 b=32,min=a;,41,if(ab)min=b;,32,min=32,8.4 对指针变量的操作,8.4.2 移动指针&8.4.3 指针比较,所谓移动指针就是对指针变量加上或减去一个整数,或通过赋值运算,使指针变量指向相邻的存储单元。,假定在内存中开辟了如图所示的五个连续的、存放int类型整数的存储单元,并分别给它们取代号为:a0、a1、a2、a3、a4。这些代号所代表的存储单元中,分别有值为:11、22、33、44、55。,a0 a1 a2 a3 a4,11 22 33 44 55,例如:int*p,*q;p=,p,q=p+

7、2;q+;q-;p+;,q,q,q,p,当有:int i,j,k;i=*p;j=*q;k=q-p;,i,j,k,22 44 2,指针比较,if(pq)printf(“p points to lower memory than q.n”);else printf(“q points to lower memory than p.n”);,p points to lower memory than q.,if(p=0)printf(“p points to NULL.N”);,8.5 函数之间地址值的传递,8.5.1 形参为指针变量时实参和形参之间的数据传递,例8.2 程序举例。#include

8、int myadd(int*a,int*b)int sum;sum=*a+*b;return sum;main()int x,y,z;printf(“Enter x,y:”);scanf(“%d%d”,x,y,z,Enter x,y:,24 41,24,41,调用,传递,a,b,sum,sum=x+y;,65,退出函数,将变量sum的值作为这个函数的返回值,返回到他的调用处。此时,该函数中的变量全部释放。,65,65,24+41=65,8.5 函数之间地址值的传递,8.5.2 通过传递地址值在被调用函数中直接改变调用函数中的变量的值,例8.3 调用swap函数,交换主函数中变量x和y中的数据。

9、,第七章例7.3的重写,#include void swap(int*,int*);main()int x=30,y=20;printf(1)x=%d y=%dn,x,y);swap(,/*函数说明语句*/,x,y,(1)x=30 y=20,调用,传递,a,b,t,(2)a=30 b=20,(3)a=20 b=30,退出该函数,返回到它的调用处,该函数无返回值,因为该函数为void类型,此时该函数中的变量全部释放。,(4)x=20 y=30,t=x;x=y;y=t;,30,20,20,30,8.5 函数之间地址值的传递,8.5.2 通过传递地址值在被调用函数中直接改变调用函数中的变量的值,例8

10、.4 编写函数order(int*a,int*b),使调用函数中的第一个实参总是存放两个数中的较小的数,第二参数存放两个数中较大的数。,#include void swap(int*x1,int*x2)int t;t=*x1;*x1=*x2;*x2=t;void order(int*a,int*b)if(*a*b)swap(a,b);main()int x,y;printf(Enter x,y:);scanf(%d%d,x,y,Enter x,y:,41 24,41,24,x=41 y=24,调用,a,b,传递,if(xy)swap(a,b);,调用并传递数据,x1,x2,t=x;,24,41

11、,x=24 y=41,8.5 函数之间地址值的传递,8.5.3 函数返回地址值,#include int*fun(int*,int*);main()int*p,i,j;printf(Enter two number:scanf(%d%d,/*函数说明*/,例8.5 程序举例。,p,i,j,Enter two number:,99 101,99,101,传递,a,b,if(ij)return a;,退出该函数,返回到它的调用处,该函数的返回值是一个地址(j的地址),所以该函数是一个指针类型。退出时该函数中的变量全部释放。,i=99,j=101,*p=101,习题,一.选择题8.1 若有定义:in

12、t x,*pb;则正确的赋值表达式是A pb=程序的输出结果是A 5,2,3 B-5,-12,-7 C-5,-12,-17 D 5,-2,-7,A,B,B,习题,8.4 若有以下程序:#include main()int k=2,m=4,n=6,*pk=后,*p的值是A 20 B 30 C 21 D 318.6 若指针p已正确定义并指向如图所示存储单元,则*+p的值是A 20 B 30 C 21 D 318.7 若指针p已正确定义并指向如图所示存储单元,则+*p的值是A 20 B 30 C 21 D 31,a0 a1 a2 a3 a4,10 20 30 40 50,p,C,B,B,C,习题,8

13、.8 若有以下程序:#include void prtv(int*x)printf(%dn,+*x);main()int a=25;prtv(程序的输出结果是A 运行错误 B 100 C a的地址 D b的地址,D,B,习题,8.10 若有以下程序:#include void fun(float*a,float*b)float w;*a=*a+*a;w=*a;*a=*b;*b=w;main()float x=2.0,y=3.0,*px=程序的输出结果是A 4,3 B 2,3 C 3,4 D 3,2,8.11 若有以下程序:#include void sub(double x,double*y,double*z)*y=*y-1.0;*z=*z+x;main()double a=2.5,b=9.0,*pa,*pb;pa=程序的输出结果是A 9.000000 B 1.500000 C 8.000000 D 10.500000,C,C,习题,8.12 以下四个程序中不能对两个整型值进行交换的是A#include B#include void swap(int*p,int*q)void swap(int*p,int*q)int*t,a;int t;t=,C,习题,二.填空题8.13 以下程序段的输出结果是_.int*var,b;b=100;var=,110,7 1,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1