如何通过函数指针调用函数(实现代码)
代码 实现 如何 通过 调用函数 函数指针
2023-06-13 09:15:04 时间
一个函数在编译的时候会被分配给一个入口地址。这个函数入口地址称为函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。
定义指向函数的指针变量的方法是:
int(*p)(int,int);
int【指针变量p指向的函数的类型】(*p)【p是指向函数的指针变量】(int,int)【p所指向的形参类型】;
与函数的原型进行比较
intmax (int,int);
int【函数的类型】max【函数名】(int,int)【函数的形参类型】;
一个例子:
一般方法的代码:
#include<iostream>
usingnamespacestd;
intmain(){
intmax(intx,inty);
inta,b,c,m;
cout<<"Pleaseinputthreeintegers:"<<endl;
cin>>a>>b>>c;
m=max(max(a,b),c);
cout<<"Max="<<m<<endl;
return0;
}
intmax(intx,inty){
intz;
if(x>y){
z=x;
}else{
z=y;
}
returnz;
}
然后,我们定义一个指针变量,指向max函数,然后通过该指针变量调用函数。
通过(*p)来调用函数
#include<iostream>
usingnamespacestd;
intmain(){
intmax(intx,inty);
int(*p)(intx,inty);
p=max;
inta,b,c,m;
cout<<"Pleaseinputthreeintegers:"<<endl;
cin>>a>>b>>c;
m=(*p)((*p)(a,b),c);
cout<<"Max="<<m<<endl;
return0;
}
intmax(intx,inty){
intz;
if(x>y){
z=x;
}else{
z=y;
}
returnz;
}
可以通过指针p直接调用函数
#include<iostream>
usingnamespacestd;
intmain(){
intmax(intx,inty);
int(*p)(intx,inty);
p=max;
inta,b,c,m;
cout<<"Pleaseinputthreeintegers:"<<endl;
cin>>a>>b>>c;
m=p(p(a,b),c);
cout<<"Max="<<m<<endl;
return0;
}
intmax(intx,inty){
intz;
if(x>y){
z=x;
}else{
z=y;
}
returnz;
}
用指向函数的指针作为函数的参数
函数指针变量最常见的用途之一是作为函数的参数,将函数名传递给其他函数的形参。这样那个就可以在调用一个函数的过程中,根据给定的不同的实参,调用不同的函数。
例如,利用该方法解决,两个函数y1=(x+1)^1; y2=(2x+3)^2 ; y3=(x^2+1)^3
分析:编写3个函数f1,f2,f3,用来求上面3个函数x+1,2x+3,x^2+1的值。
然后编写一个通用函数Squar,他有两个形参:a次方和指向函数、
程序代码:
#include<iostream>
#include<math.h>
usingnamespacestd;
doublefun1(doublen){
doubler;
r=n+1;
returnr;
}
doublefun2(doublen){
doubler;
r=2*n+3;
returnr;
}
doublefun3(doublen){
doubler;
r=(pow(n,2)+1);
returnr;
}
doubleSquar(inta,doublex,double(*p)(double)){
doubler,z;
z=(*p)(x);
r=pow(z,a);
returnr;
}
intmain(){
doublefun1(doublen);
doublefun2(doublen);
doublefun3(doublen);
doubleSquar(inta,doublex,double(*p)(double));
doublex;
cout<<"Pleaseinputx:";
cin>>x;
cout<<"(x+1)^1=";
cout<<Squar(1,x,fun1)<<endl;
cout<<"(2x+3)^2=";
cout<<Squar(2,x,fun2)<<endl;
cout<<"(x^2+1)^3=";
cout<<Squar(3,x,fun3)<<endl;
cout<<endl;
return0;
}
相关文章
- 手把手带你使用webpack4构建一个Vue开发编译环境,并实现代码分割,css代码分离
- java局域网发送文件_Java如何实现局域网文件传输代码案例分享
- WordPress网站如何实现一键复制(附JS代码)
- 深度学习之卷积神经网络CNN及tensorflow代码实现示例
- html左侧浮动广告代码,网站侧边栏广告固定浮动效果的实现「建议收藏」
- 用settimeout如何实现倒计时_javascript一分钟倒计时代码
- 使用了不到200行的核心代码就实现了一个美轮美奂的Redis客户端
- 你不知道的 Git 技巧:如何实现核心代码保护
- 前端如何实现将多页数据合并导出到Excel单Sheet页解决方案|内附代码
- 关键字检索高亮标出-javasript/jQuery代码实现详解编程语言
- 如何用70行Java代码实现深度神经网络算法详解编程语言
- 两个DIV等高的JS的实现代码
- .net清空所有Cache的实现代码
- php中文和编码判断代码
- PHP中文分词的简单实现代码分享
- 用phpmailer实现简单openvpn用户认证的实现代码
- phpDOS攻击实现代码(附如何防范)
- 如何使用jquery动态加载js,css文件实现代码
- jquery实现二级/三级/多级联动菜单的思路及代码
- C#仿密保卡功能的简单实现代码
- 解析phpDOMElement操作xml文档的实现代码
- window.event.keyCode兼容IE和Firefox实现js代码
- JQuery实现表格中相同单元格合并示例代码
- C#实现简单的JSON序列化功能代码实例
- c#删除代码中的单行注释行示例