C语言全国计算机二级等级考试教程d第八章地址和指针(章节带习题)ppt课件_第1页
C语言全国计算机二级等级考试教程d第八章地址和指针(章节带习题)ppt课件_第2页
C语言全国计算机二级等级考试教程d第八章地址和指针(章节带习题)ppt课件_第3页
C语言全国计算机二级等级考试教程d第八章地址和指针(章节带习题)ppt课件_第4页
C语言全国计算机二级等级考试教程d第八章地址和指针(章节带习题)ppt课件_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

.,第8章地址和指针,8.1变量的地址和指针8.2指针变量的定义和指针变量的基类型8.3给指针变量赋值8.4对指针变量的操作8.5函数之间地址值的传递,考试的重点,.,8.1变量的地址和指针,计算机的内存是以字节为单位的一片连续的存储空间,每一个字节都有一个编号,这个编号就成为内存地址。,内存空间,地址,10101011101210131014,10151016,:,:,120012011202120312041205,例如:shorta,b;floatx;a=3;b=5;x=3.5;,:,:,2002200320042005,a,b,x,3,5,3.5,每个变量的地址是指该变量所占存储单元的第一个字节的地址。,在C语言中,我们可以定义整型变量、实型变量、字符变量。他们都是用来存放数据的。今天,我们来学习一下特殊的变量,这种变量只是用来存放内存地址的。,比如我们定义了一个指针变量p,p,占4个字节,该变量中只能存放内存地址,比如把变量a的地址赋予指针变量p,则指针变量p的值为1012。,1012,请问,当访问变量a时,访问的是什么?当访问指针变量p时,访问的是什么?,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,*s2;,pd的基类型为double类型,在指针变量pd中,只能存放double类型变量的地址。,s1和s2的基类型为char类型,在指针变量s1和s2中,只能存放char类型变量的地址。,.,8.3给指针变量赋值,8.3.1给指针变量赋地址值,例如:intk,*q,*p;,/*k为整型变量,q和p都是指针变量。*/,q,p,k,k=1;,/*给普通变量赋值*/,整型变量k只被能赋予整型值,赋值时直接赋值就可以了,而指针变量只能被赋予地址值,如下是把整型变量k的地址赋值给指针变量q。,q=,p=NULL;,int*p;p=0;,int*p;p=0;,注意,此时,指针变量p中不是没有值,而是有一个“空”值。,.,8.4对指针变量的操作,8.4.1通过指针来引用一个存储单元,#includemain()intk,*q,*p;k=1;q=,112450521245052,输出时,变量k为1,而指针变量q和p则为变量k的地址。,#includemain()intk,*q,*p;k=1;q=,1,k,p=,/*定义了三个变量*/*取变量i的地址赋给指针变量p*/*间接访问指针变量中的值10赋给变量j*/,p,10,i,j,10,j=i;,间接访问运算符*是一个单目运算符,必须出现在运算对象的左边。其运算对象可以是存放地址的指针变量,也可以是地址。,j=*(,j=*,扩展知识:,j=*p+1;,10,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用指针指向两个变量,通过指针运算选出值最小的那个数。,#includemain()inta,b,min,*pa,*pb,*pmin;pa=,pa,pb,pmin,a,b,min,/*输入的值依次放入pa、pb所指存储单元中*/,scanf(“%d%d”,比如输入:,4132,41,32,a=41b=32,min=a;,41,if(ab)min=b;,32,min=32,.,8.4对指针变量的操作,8.4.2移动指针p=,p,q=p+2;q+;q+;q-;p+;,q,q,q,p,当有:inti,j,k;i=*p;j=*q;k=q-p;,i,j,k,22442,指针比较,if(p*b)swap(a,b);main()intx,y;printf(Enterx,y:);scanf(%d%d,x,y,Enterx,y:,4124,41,24,x=41y=24,调用,a,b,传递,if(xy)swap(a,b);,调用并传递数据,x1,x2,t=x;x=y;y=t;,24,41,x=24y=41,.,8.5函数之间地址值的传递,8.5.3函数返回地址值,#includeint*fun(int*,int*);main()int*p,i,j;printf(Entertwonumber:);scanf(%d%d,/*函数说明*/,例8.5程序举例。,p,i,j,Entertwonumber:,99101,99,101,传递,a,b,if(ij)returna;,退出该函数,返回到它的调用处,该函数的返回值是一个地址(j的地址),所以该函数是一个指针类型。退出时该函数中的变量全部释放。,i=99,j=101,*p=101,.,习题,一.选择题8.1若有定义:intx,*pb;则正确的赋值表达式是Apb=程序的输出结果是A5,2,3B-5,-12,-7C-5,-12,-17D5,-2,-7,A,B,B,.,习题,8.4若有以下程序:#includemain()intk=2,m=4,n=6,*pk=后,*p的值是A20B30C21D318.6若指针p已正确定义并指向如图所示存储单元,则*+p的值是A20B30C21D318.7若指针p已正确定义并指向如图所示存储单元,则+*p的值是A20B30C21D31,a0a1a2a3a4,1020304050,p,C,B,B,C,.,习题,8.8若有以下程序:#includevoidprtv(int*x)printf(%dn,+*x);main()inta=25;prtv(程序的输出结果是A运行错误B100Ca的地址Db的地址,D,B,.,习题,8.10若有以下程序:#includevoidfun(float*a,float*b)floatw;*a=*a+*a;w=*a;*a=*b;*b=w;main()floatx=2.0,y=3.0,*px=程序的输出结果是A4,3B2,3C3,4D3,2,8.11若有以下程序:#includevoidsub(doublex,double*y,double*z)*y=*y-1.0;*z=*z+x;main()doublea=2.5,b=9.0,*pa,*pb;pa=程序的输出结果是A9.000000B1.500000C8.000000D10.500000,C,C,.,习题,8.1

温馨提示

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

评论

0/150

提交评论