函数指针的相关用法

定义一个指向函数的指针,例如:

int cuckoo(int baby);

则可以这样来定义一个指向该函数的指针:

int (*pCuckoo)(int);

如果想定义所有函数指针的类型(可以方便的声明多个变量),则可以这样来做:

typedef int(*)(int)   FunPointerType;

利用该类型声明一个函数指针如下:

FunPointerType   pCuckoo;

FunPointerType   pShrimp;

好了,既然我们有了函数指针,那么怎么样来对其进行初始化呢?

It's a piece of cake!

pCuckoo   = &cuckoo;

pShrimp    = &cuckoo;

ok, 怎么使用他们呢?废话少说,很简单:

pCuckoo(3);

or (*pCuckoo)(3);

就这么简单了!

不过在实际使用过程中,有些函数的参数就是一个函数指针,例如:

void Test(int(*f)(int));

那么怎么调用Test呢?更简单了:

Test(pCuckoo);

呵呵,是不是大功告成?

别急,有时候我们会碰到这样一个问题,如果想把一个类中的成员函数当作参数传给Test,也可以这样子做吗?

呵呵,你试一下:

Class A

{

A()

{

   Test(try);

};

~A();

int try(int nTimes);

}

哼哼,编译器会毫不留情地告诉你,有问题了!

为什么会这个样子呢?答案也比较简单:所有成员函数的参数列表中都隐藏了一个this指针(记起来了吧?),这样的话,try成员函数的参数列表当然与Test函数所需要的不同了,编译器不报错就怪了!

怎么办?还是比较简单:

解决方案就是将这个成员函数改成static,这样就ok了!

好了,还有什么我没有说清楚的吗?请发email至alittleshrimp@gmail.com 欢迎骚扰!:)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值