普通函数的指针:指向普通的函数,如果要指向类的成员函数,则该成员函数必须是静态的;
void (*pFUN)(int ,char *);
在这里为了定义的方便和简化表达式,强烈建议定义用typedef;
typedef void(*pFUN)(int ,char *);
pFUN fun1;
void show(int a,char *p){}
static void show(int a,char *p)({}
fun1=show; 或者是 fun1=&show;// OK
//C/C++的函数名称可以退化到对应的函数指针;
(*fun1)(2,"hello"); //函数的调用;
成员函数指针:成员函数的调用一定是类对象的调用;
在这里有几个特殊的操作符:
(::*) (->*) (.*)
typedef void (ClassName::*pFUN)(int, char *);
class ClassName
{
public:
void show(int a,char *p)
{
}
};
ClassName aa;
ClassName *bb=new ClassName;
pFUN fun1;
fun1=&ClassName::show; //此处一定要加&
//但是成员函数指针不能隐式退化;
(aa.*fun1)(); //实例对象调用成员函数;
(bb->*fun1)();//指针对象调用成员函数;
值得注意的是:成员函数指针不能指向静态成员函数;经过编译发现取静态函数地址的时候会出错;
类中的常函数指针也的有const修饰;
typedef void (ClassName::*pFUN)(int, char *) const;