函数指针

     在C/C++中,有一个很有意思的语法结构——函数指针,还有一个与之类似的概念——指针函数。

在语法结构上,函数指针是一个指向函数的指针,而指针函数只是说明他是一个返回值为指针的函数,函数指针可以用来指向一个函数。

举例说明:

指针函数大多这样定义int *fun(int x,int y);他返回的是一个指向整型数据的地址指针,其值是指针;

函数指针大多这样定义int (*fun)(int x, int y);他一般表示为指向数组的首地址,或者是指向函数代码的首地址,指向函数代码首地址的指针变量。

注意:()的优先级要比*高。

比如有一个分割字符串的函数strtok_s,函数原型如下:

他的返回值就是一个指向分割后的字符串char*的地址。

而在STL中,有一个算法sort,函数原型如下:

其中的_Pr _Pred就是一个_Pr类型的类对象或是函数指针。

     其实,函数指针就相当于C#中委托的概念,但却有本质上的区别,这里不做详细讨论。

函数指针最大的优点是调用中具有相同的入口,可以有不同的实现。比如说上面的sort算法,在传入不同的函数体_Pred的时候,你可以传入升序的方法,也可以传入降序的方法,但只需编写一个函数sort就可以实现两个功能(甚至多个,和你的传入_Pred有关,比如你可以让一个整数向量中偶数升序,奇数降序排序)。好处显而易见,STL中的很多算法都是如此实现。

     我们也可以如此使用,下面举例:

     应当注意的是,如果想在类中实现,函数体要么设为全局函数,要么设为静态函数。因为,函数指针指向的是一块代码区,地址是不属于任何一个对象的。

    上面的代码中,A::myFun和B::MyFunB都是不同的类中的函数实现,一个入口,多种实现!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值