函数指针

函数指针在Windows回调函数中用的比较多,其定义有两种方法:

void (*FUNC)(void);
void func(){
    printf("Test FUNC!");
}
//FUNC = func; //这一行无法通过编译。
 int main(){
    FUNC = func;
    (*FUNC)();
}

  上面的代码是标准的声明方法,但是其缺点是只有一个函数指针,且不能在全局范围内对指针赋值,上面注释的那一行有问题,无法通过编译。另外如果想声明两个指针则还需要声明一行,比较麻烦。

typedef void (*FUNC)(void);
void func(){
    printf("Test FUNC!");
}
FUNC Func = func; //这一行可以通过编译。
FUNC FUnc = func;
 int main(){
    (*Func)();
    (*FUnc)();
}

为了简化声明,使用typedef将FUNC定义成为一个函数指针的类型,可以用它进行多个函数指针的变量声明。

class TABC(){
private:
    int A;
public:
   int getA();
   TABC(int a):A(a){
   }
}
typedef void (*FUNC)(TABC* abc);
void func(void* p){
    TABC* abc = (TABC*)p;   
    printf("%d\n",abc->getA());
}
//ENUMFUNC一般是Windows API,这里简单的演示其内部调用方法。
void ENUMFUNC(FUCN func,void* p){
    func(p);
}
int main(){
   TABC* abc = new TABC(5);
   ENUMFUNC(func,(void*)abc);
   delete abc; 
}
//上面为Windows API的标准回调方法,回调函数的参数通过p传入,需要强制转换

另外还有成员函数指针的用法参考:类成员函数指针的用法




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值