(6.37)-第36课(8.5节-函数与指针)_第1页
(6.37)-第36课(8.5节-函数与指针)_第2页
(6.37)-第36课(8.5节-函数与指针)_第3页
(6.37)-第36课(8.5节-函数与指针)_第4页
(6.37)-第36课(8.5节-函数与指针)_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

函数与指针指针的使用函数指针的概念函数名是有值的,它代表着函数的入口地址(函数第一条指令存放的地址)函数指针就是函数的入口地址指令1指令2指令nfunc函数func所占内存单元指向函数的指针变量定义格式返回值类型

(*指针变量)([形参类型1,形参类型2,…,形参类型n])函数返回值的数据类型专门存放函数入口地址可指向返回值类型相同的不同函数()不能省int(*p)()与int*p()不同int(*p)(int,int);定义了一个可指向带两个int型的形参,其返回值为int型的函数指针变量;而int*p(int,int);

则表示是一个返回值为int型指针值的函数例指向函数的指针变量赋值

函数名代表该函数的入口地址。因此,可用函数名给指向函数的指针变量赋值

其赋值的一般格式为:指向函数的指针变量

=函数名;intmax(inta,intb){return(a>b?a:b);}……int(*p)(int,int);

//定义指向函数的指针变量pp=max;//将函数max的入口地址赋给p例指向函数的指针变量调用格式函数指针变量([实参1,实参2,…,实参n]);或:(*函数指针变量)([实参1,实参2,…,实参n]);intmax(inta,intb){return(a>b?a:b);}……

int(*p)(int,int);//定义函数指针p

p=max;

p(2,3);//调用max函数,等价于max(2,3)或:

(*p)(2,3);

//调用max函数,等价于max(2,3)例【例1:】用函数指针变量作参数,求最大值、最小值和两数之和#include<stdio.h>#include<stdlib.h>#include<malloc.h>intmax(int,int);intmin(int,int);intadd(int,int);voidprocess(int,int,int(*fun)(int,int));voidmain(){inta,b;scanf("%d%d",&a,&b);process(a,b,max);process(a,b,min);process(a,b,add);}voidprocess(intx,inty,int(*fun)(int,int)){intresult;result=(*fun)(x,y);printf("%d\n",result);}intmax(intx,inty){printf("max=");return(x>y?x:y);}intmin(intx,inty){printf("min=");return(x<y?x:y);}intadd(intx,inty){printf("sum=");return(x+y);}运行结果(输入:3,4↙):max=4min=3sum=7【例2:】编写一个用矩形法求定积分的通用函数,分别求以下定积分:

解题思路函数的原型:floatintegral(floata,floatb,intn,double(*p)(double));

该函数应有四个形参,其中:a用于接收积分下限b用于接收积分上限n用于接收等分数p用于指向要积分的函数程序实现#include<stdio.h>#include<math.h>floatintegral(floata,floatb,intn,double(*p)(double)){floath,s=0;inti;h=(b-a)/n;for(i=0;i<n;i++)s+=(*p)(a+i*h)*h;//计算第i个小矩形的面积并累加returns;}voidmain(){floatjf1,jf2,jf3,a,b;intn;printf("请输入积分下限:");scanf("%f",&a);printf("请输入积分上限:");scanf("%f",&b);printf("请输入等分次数:");scanf("%d",&n);

jf1=integral(a,b,n,sin);//调用函数,将sin函数的入口地址作为第4个实参jf2=integral(a,b,n,cos);//调用函数,将cos函数的入口地址作为第4个实参jf3=integral(a,b,n,exp);//调用函数,将exp函数的入口地址作为第4个实参printf("SIN函数的积分值是:%f\n",jf1);printf("COS函数的积分值是:%f\n",jf2);printf("EXP函数的积分值是:%f\n",jf3);}返回指针值的函数例如:

int*a(intx,inty);a是函数名,调用它以后能得到一个指向整型数据的指针(地址)x、y是函数a的形参,其类型为整型一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针型的数据,即地址定义:类型名*函数名(参数表)

{·······}【例3:】有若干个学生的成绩(每个学生有4门课程),要求在用户输入学生序号以后,能输出该学生的全部成绩。用返回指针的函数来实现解题思路

定义一个二维数组score,用来存放学生成绩(设学生数为3,课程数为4)定义一个查询学生成绩的函数search,它是一个返回指针的函数,形参是指向二维数组的指针变量和整型变量n,从主函数将数组名score和要找的学生号k传递给形参函数的返回值是&score[k][0](即存放序号为k的学生的序号为0的课程的数组元素的地址)。然后在主函数中输出该生的全部成绩程序实现#include<stdio.h>voidmain(){floatscore[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};float*search(float(*pointer)[4],intn);//函数声明float*p;inti,m;printf("请输入要查询的学生序号(0-2之间的一个数):");scanf("%d",&m);

p=search(score,m);

//调用search函数,返回score[k][0]的地址printf(“\n第%d个学生的成绩是:\n",m);for(i=0;i<4;i++)printf("%5.2f\t",*(p

温馨提示

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

评论

0/150

提交评论