如何通过函数指针调用函数(实现代码)

 更新时间:2020年4月25日 17:45  点击:2104

说明:
指针可以不但可以指向一个整形,浮点型,字符型,字符串型的变量,也可以指向相应的数组,而且还可以指向一个函数。

一个函数在编译的时候会被分配给一个入口地址。这个函数入口地址称为函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。

定义指向函数的指针变量的方法是:

复制代码 代码如下:

int (*p) (int ,int );

int【指针变量p指向的函数的类型】 (*p)【p是指向函数的指针变量】 ( int,int )【p所指向的形参类型】;

与函数的原型进行比较

复制代码 代码如下:

int max  (int, int );

int【函数的类型】 max【函数名】 ( int,int )【函数的形参类型】;

一个例子:
一般方法的代码:

复制代码 代码如下:

#include<iostream>
using namespace std;
int main(){
 int max(int x,int y);
 int a,b,c,m;
 cout<<"Please input three integers:"<<endl;
 cin>>a>>b>>c;
 m=max(max(a,b),c);
 cout<<"Max="<<m<<endl;
 return 0; 
}
int max(int x,int y){
 int z;
 if(x>y){
  z=x;
 } else{
  z=y;
 }
 return z;
}

然后,我们定义一个指针变量,指向max函数,然后通过该指针变量调用函数。
通过(*p)来调用函数
复制代码 代码如下:

#include<iostream>
using namespace std;
int main(){
 int max(int x,int y);
 int (*p) (int x,int y);
 p=max;
 int a,b,c,m;
 cout<<"Please input three integers:"<<endl;
 cin>>a>>b>>c;
 m=(*p)((*p)(a,b),c);
 cout<<"Max="<<m<<endl;
 return 0; 
}
int max(int x,int y){
 int z;
 if(x>y){
  z=x;
 } else{
  z=y;
 }
 return z;
}

可以通过指针p直接调用函数
复制代码 代码如下:

#include<iostream>
using namespace std;
int main(){
 int max(int x,int y);
 int (*p) (int x,int y);
 p=max;
 int a,b,c,m;
 cout<<"Please input three integers:"<<endl;
 cin>>a>>b>>c;
 m=p(p(a,b),c);
 cout<<"Max="<<m<<endl;
 return 0; 
}
int max(int x,int y){
 int z;
 if(x>y){
  z=x;
 } else{
  z=y;
 }
 return z;
}

用指向函数的指针作为函数的参数
函数指针变量最常见的用途之一是作为函数的参数,将函数名传递给其他函数的形参。这样那个就可以在调用一个函数的过程中,根据给定的不同的实参,调用不同的函数。

例如,利用该方法解决,两个函数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>
using namespace std;
double fun1(double n){
 double r;
 r=n+1;
 return r;
}
double fun2(double n){
 double r;
 r=2*n+3;
 return r;
}
double fun3(double n){
 double r;
 r=(pow(n,2)+1);
 return r;
}
double Squar(int a, double x, double(*p)(double )){
 double r,z;
 z=(*p)(x);
 r=pow(z,a);
 return r;
}
int main(){
 double fun1(double n);
    double fun2(double n);
 double fun3(double n);
    double Squar(int a, double x, double(*p)(double ));
 double x;
    cout<<"Please input x:";
 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;
 return 0;   
}

[!--infotagslink--]

相关文章

  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • Spring AOP 对象内部方法间的嵌套调用方式

    这篇文章主要介绍了Spring AOP 对象内部方法间的嵌套调用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-08-29
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • php 调用goolge地图代码

    <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
  • c# 三种方法调用WebService接口

    这篇文章主要介绍了c# 三种方法调用WebService接口的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-07
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • PHP函数分享之curl方式取得数据、模拟登陆、POST数据

    废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
  • js实现调用网络摄像头及常见错误处理

    这篇文章主要介绍了js实现调用网络摄像头及常见错误处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-07
  • C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
  • c#动态调用Webservice的两种方法实例

    这篇文章介绍了c#动态调用Webservice的两种方法实例,有需要的朋友可以参考一下...2020-06-25
  • PHP函数strip_tags的一个bug浅析

    PHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。由于 strip_tags() 无法实际验证 HTML,不完整或者破损标签将导致更多的数...2014-05-31
  • SQL Server中row_number函数的常见用法示例详解

    这篇文章主要给大家介绍了关于SQL Server中row_number函数的常见用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08