




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
(TheCLanguageProgramming),C语言程序设计,2,教学目的与要求:掌握程序的基本结构了解C语句概述熟记数据的输入及输出函数的一般格式,并能编写简单的顺序结构程序。教学手段:多媒体课件为主,辅以黑板板书教学内容、重点、难点及作业详见课件,3,第8章指针,8.1指针与指针变量8.2指针与函数,4,8.1指针与指针变量,8.1.1地址与指针C语言根据变量类型的不同为其分配不同字节数的存储单元,所分配存储单元的首地址为变量的地址。如有下列定义:inta;floatx;这里a的地址为4000,x的地址为4002。,5,变量具有三要素:名字、类型与值。,按变量名或地址存取变量值的方式称为“直接存取”方式。前面程序中都是这种方式。与“直接存取”相对应的是“间接存取”。所谓“间接存取”就是先通过一个特殊的变量得到某变量的地址,然后根据该地址值再去访问该变量,如图所示。,所谓“指针”就是内存中的一个地址。一个变量的指针即该变量的地址,如4000就是指向变量a的指针。专门存放地址的变量,称为指针变量。如p。,6,8.1.2指针变量的定义与初始化,1.指针变量的定义定义形式为:类型标识符*指针变量名;例如:int*p;float*f;注意:在指针变量定义中,*是一个说明符,目的是与其他变量相区分。如p是指针变量,而不要认为*p是指针变量。指针变量也具有变量的三要素:变量名、变量类型与变量的值。,7,2.指针运算符与地址运算符,与指针有关的两个运算符:输出结果为:5,5注意:*与int*p=,以下程序段的输出结果是什么:inta=2,b=3,*p1=,9,8.1.3指针变量的引用,对指针变量的引用包含两个方面:一是对指针变量本身的引用,如对指针变量进行的各种运算;二是利用指针来访问所指向变量,称为对指针的间接引用。1.指针的赋值运算(1):将一个变量的地址值赋给指针变量。如:inta,*p;p=注意:只有相同类型的指针变量才能相互赋值。,10,(3)给指针变量赋“空”值“空”指针值用NULL表示,NULL是在头文件stdio.h中预定义的符号常量,其值为0。例如:#includestdio.hint*paNULL;亦可以用下面的语句给指针变量赋“空值”:pa=0;或pa=0;注意:不能把其他的常量作为地址赋给指针变量。例如,即使你知道整型变量a的地址是4000,也不能使用下面的赋值语句:pa=4000;而只能:pa=,11,例8.1从键盘上输入两个整数到a、b,按由大到小输出。,main()inta,b,*p1,*p2,*p;p1=,12,2.指针的算术运算,由于指针是一种特殊的变量,其运算亦具有其特点。一个指针变量可以加、减一个整数。例如:int*p,a=2,b=4,c=6;p=,13,3.指针的关系运算,与基本类型变量一样,指针变量也可以进行关系运算。若p,q是两个同类型的指针变量,则:pq,p=q都是允许的。指针变量的关系运算在指向数组的指针中有广泛的运用,见8.3。注意:在指针进行关系运算之前,指针变量必须指向确定的变量或存储区域,即指针变量有初始值;另外,只有相同类型的指针才能进行比较。,14,8.1.4指向指针的指针,定义形式如下:类型标识符*指针变量名;例如:inta,*p,*pp;a=5;p=,二级指针与一级指针是两种不同类型的数据,尽管它们保存的都是地址,但不可相互赋值。,15,例8.2二级指针的使用。,main()inta=5,*p,*pp;p=/*二级指针引用*/,16,8.2指针与函数,8.2.1指针作为函数参数函数的形参可以是指针类型,调用函数时实参可以是指针变量或存储单元地址。例8.3编写一个交换两个变量的函数。在主程序中调用该函数,实现两个变量值的交换。main()inta,b,*pa,*pb;voidswap(int*p1,int*p2);scanf(%d%d,17,voidswap(int*p1,int*p2)inttemp;temp=*p1;*p1=*p2;*p2=temp;,程序运行结果如下:输入:58输出:a=8,b=5,18,若将swap()函数写为如下的形式,请分析此时该函数所完成的功能:voidswap(int*p1,int*p2)int*temp;temp=p1;p1=p2;p2=temp;,19,看下面的程序:voidswap(int*p1,int*p2)int*p;p=p1;p1=p2;p2=p;printf(*p1=%d,*p2=%dn,*p1,*p2);main()inta,b,*pa,*pb;pa=,程序运行结果如下:输入:58输出:*p1=8,*p2=5a=5,b=8*pa=5,*pb=8,20,8.2.2返回指针值的函数,定义形式为:类型标识符*函数名(形式参数表)例如:int*fun()此时在函数体中要有返回指针或地址的语句。如:return(,21,8.2.3指向函数的指针,编译后的函数是由一串指令序列构成的,其代码存储在连成一片的内存单元中,这片内存单元的首地址称为函数的入口地址。主函数在调用子函数时,就是让程序转移到函数的入口地址去执行。与数组名代表数组的首地址一样,函数名代表函数的入口地址。如果将函数的入口(或函数名)地址赋给一个指针变量,则该指针变量就是一个指向函数的指针。指向函数的指针定义形式为:类型标识符(*指针变量名)();例如:int(*p)();float(*q)();,22,例8.5用函数max()来求一维数组元素的最大值,在主调函数中分别用函数名和函数指针调用该函数。,#defineN10floatmax(floata,intn)inti;floatm=a0;for(i=1;im)m=ai;returnm;,23,main()floatmaxf,maxp;floataN=11,2,3,4,5,15,64,7,58,39;float(*p)();p=max;maxp=(*p)(a,N);maxf=max(a,N);printf(maxp=%.2fn,maxp);printf(maxf=%.2fn,maxf);,24,指向函数的指针的使用步骤:(1)定义一个指向函数的指针变量,形如:float(*p)();(2)为函数指针赋值,格式如下:p=函数名;注意:赋值时只需给出函数名,不要带参数。(3)通过函数指针调用函数,调用格式如下:(*p)(实参);,25,1、main()inta=5,b=6,*p1,*p2;p1=,课堂练习,26,2、int*fun(intx,inty)intc;c=x+y;return(,27,3、intfun(int*x,int*y)intc;c=*x+*y;return(c);main()inta=5,b=6;printf(“%dn”,fun(,28,4、intfun(int*x,int*y)intc;c=*x+*y;return(c);main()inta=5,b=6,(*p)();p=fun;printf(“%dn”,fun(,注意:使用指向函数的指针调用函数时,若函数定义在后,则应先声明函数方可调用,此时与函数的返回值类型无关。,29,5、main()inta=5,b=6,(*p)();intfun(int*,int*);p=fun;printf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 核子仪考试题及答案
- 郑州校园探访活动方案
- 贵州转学考试题及答案
- 钢琴乐理考试题及答案
- 农民合作社农业信贷支持协议
- 氟骨病考试题及答案
- 提升生态合作保障承诺书5篇
- 专业人士行业担当承诺书6篇
- 用户反馈信息分类表格
- 方向辨认考试题及答案
- 土木工程概论课件
- 提升家庭教育指导能力
- 设备借用协议范本
- caprini评分表的发展、应用研究及改进探讨
- 交安工程施工合同
- 高中生物选择性必修一知识点总结
- 肠造口并发症讲稿课件
- GB/T 6403.5-2008砂轮越程槽
- GB/T 15970.2-2000金属和合金的腐蚀应力腐蚀试验第2部分:弯梁试样的制备和应用
- 石灰石石膏湿法脱硫工艺详1系统课件
- 组织行为学核心主题全系列(MBA研修班学生版4日)课件
评论
0/150
提交评论