千家信息网

C++程序的函数指针实际操作介绍

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要介绍"C++程序的函数指针实际操作介绍",在日常操作中,相信很多人在C++程序的函数指针实际操作介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C++程序
千家信息网最后更新 2025年11月08日C++程序的函数指针实际操作介绍

这篇文章主要介绍"C++程序的函数指针实际操作介绍",在日常操作中,相信很多人在C++程序的函数指针实际操作介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C++程序的函数指针实际操作介绍"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

先看看这段代码:

#includeusing std::cout;using std::endl; inline int min(int a,int b){return (a>b) ? b : a;} int Min(int a,int b,int (*pf)(int,int))//可以使用缺省参数:int Min(int a,int b,int (*pf)(int,int)=min){return pf(a,b); //通过函数指针来调用函数,也可以写为 //return (*pf)(a,b);作用是一样的。} int main(int argc, char* argv[]){int i=1;int j=10; int r=Min(i,j,min); //如果使用缺省参数的话,可以写成:int r=Min(i,j);cout<<1r<1<1endl;return 0;}

其中int (*pf)(int,int)定义了一个返回值为int,参数为两个int的函数指针。如果不在*pf上加括号的话,即:

int *pf(int,int),

编译器会把它解释为一个返回值为整型指针,参数为两个int的函数。

可以用typedef来简化代码:

#includeusing std::cout;using std::endl;typedef int (*PF)(int,int);//这行代码是关键,相当与把上个例子中的函数指针声明为一种数据类型。 inline int min(int a,int b){return (a>b) ? b : a;}int Min(int a,int b,PF f) //PF f定义f为和上个例子中一样的函数指针。{return f(a,b);}int main(int argc, char* argv[]){int i=1;int j=10;int r=Min(i,j,min);cout<<1r<1<1endl;return 0;}

也可以提供一个用模板实现的函数指针:

#includeusing std::cout;using std::endl;inline int min(int a,int b){return (a>b) ? b : a;}templateT Min(T a,T b,T (*pf)(T,T)){return pf(a,b);}int main(int argc, char* argv[]){int i=1;int j=10;int r=Min(i,j,min); //int r=Min(i,j,min); 这种形式编译器会报错:Expression syntaxcout<<1r<1<1endl;return 0;}

当然,这个指针指向的函数也可用模板来实现:

#includeusing std::cout;using std::endl; templateinline T min(T a,T b){return (a>b) ? b : a;}templateT Min(T a,T b,T (*pf)(T,T)){return pf(a,b);}int main(int argc, char* argv[]){long i=2000000;long j=1000000;//使用时有三种形式:long r=Min(i,j,min);//第一种。注意这里在min后一定要加,否则编译器将报错://Could not find a match for "Min(long,long,T(*)(T,T)"//第二种:long r=Min(i,j,min);//第三种:long r=Min(i,j,min);//其实质是一样的。cout<<1r<1<1endl;return 0;}

不过我不能用typedef使代码更为简便,就像下面这种形式:

template

typedef T (*PF)(T,T);

编译器会提示:Templates must be classes or functions

另外还可以使用函数指针的数组:

#includeusing std::cout;using std::endl;inline int min(int a,int b){return (a>b) ? b : a;}inline int max(int a,int b){return (a>b) ? a : b;}int main(int argc, char* argv[]){int i=1;int j=10; int (*pf[2])(int,int);//拥有两个元素的函数指针数组,每个元素是返回值为int,参数为两个int的函数指针。pf[0]=min;pf[1]=max; int r1=pf[0](i,j);int r2=pf[1](i,j);cout<<1r1<1<1endl;cout<1<1r2<1<1endl;return 0;}

指向重载函数的指针也是值得注意的:#include using std::cout;using std::endl;

inline void print(int a){ cout<<1a<1<1endl;}inline void="" print(long="" b){="" cout<1<1b<1<1endl;}int main(int argc, char* argv[]){ int i=1; long m=100000; void (*pf1)(int)=print; void (*pf2)(long)=print; pf1(i); pf2(m);

return 0;}程序运行的很成功。因为编译器会自动查找所有的重载函数,以找到和函数指针指向的函数具有相同的返回类型和参数表的函数。

如上我们可知声明一个给定函数的函数指针的一般规则:即这个函数指针的返回类型和参数表必须和给定的函数相同。要注意省略号也是函数类型的一部分,int function1(int,...)与int function2(int)需要两个不同的函数指针。其实函数名就是指向该函数的指针,对于int function(int)来说,function就是它的指针。我们可用这个特性对函数指针进行初始化:int (*pf)(int)=function;

取地址操作符也可以用在函数名上,上面的代码和int (*pf)(int)=&function的作用是一样的。

到此,关于"C++程序的函数指针实际操作介绍"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

函数 指针 参数 程序 两个 代码 编译器 编译 实际 C++ 指向 类型 学习 相同 作用 例子 元素 参数表 就是 形式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库中限制一列的数值大小 祖国的网络技术发达 福建服务器机柜采购云空间 网络安全事故处置情况报告 简单的管理系统软件开发 网络安全相关法律的画 苹果手机会传照片到服务器吗 第一届指挥控制网络安全大会 找衣服关于网络安全的画 我的世界基岩版外国生存服务器 专科选择软件技术还是网络技术 共话网络安全教程 软件开发市场调查 国家网络安全电信日是哪一天 黑客倾向于网络安全 epoll服务器在哪 惠普服务器12v电源改装 深圳敏捷软件开发有限公司 服务器无法获取 ec20 断开 微信1302无法连接服务器 广州畅海网络技术有限公司 数据库插入数据执行脚本命令 人社认证服务器处理异常打不开 ff14转服务器什么时候打折 远程服务器 黑屏 12A级网络安全 阿里云数据库添加安全组 两台服务器间数据是如何同步的 网络技术开发税率多少 大数据即时查询数据库
0