函数指针与typedef函数指针

在学习ns3的道路上遇到了很多回调和函数指针相关的内容。

  • 函数指针
int (*cmpFcn)(const char *, const char *);

假设还有个函数 int commonFun (const char *, const char *)
那么 cmpFun = &commonFun
讲道理我们要这样调用函数:

int result=(*cmpFcn)(a,b);

但实际上我们写成

int result=cmpFcn(a,b);

也可以,因为聪明的编译器知道我们在做什么。

  • typedef函数指针
  typedef int (*cmpFcn2)(const char *, const char *);

该定义表示cmpFcn是一种指向函数的指针类型的名字。要使用这种指针类型时只需直接使用cmpFcn即可,不必每次把整个声明都写出来。
所以可以有 cmpFcn2 PointFun=cmpFun

  • 指向类成员函数的函数指针
    原理差不多,但是声明和使用的格式稍微要注意一点
class A{
int member(int para){}
}
int (A::*pfi) (int xx) = &&A::member ;	//声明的时候
A a;
int sth=1;
( a.*pfi )( sth );						//使用的时候

思考下为什么类成员函数的函数指针一定要用一个类的对象来调用?因为该类不是静态成员函数啊,不可能脱离对象存在的。
那么静态成员函数可以直接通过类来调用吗?没实验过,但是想来是可以的。

小tip :PFI 是Pointer-of-Function-returning-Integer的缩写

你可能感兴趣的:(#,C)