1、函数指针:指向函数的指针。该函数的类型有返回值和参数来确定,跟函数名么有关系。
2、形式:
bool (*pCompare) (const string &s1,const string &s2)
3、可使用typedef简化函数指针的使用:关于typedef的两个作用:
(1)简化对象
(2)使对象的使用目的或者作用更明确
typedef bool (*pCompare) (const string &s1,const string &s2)
4、使用:函数指针适用于在不同状态或者不同场景下,调用函数的返回值,参数都一样,但内部实现的机制或者规则不同的情况。例如:对于两个字符串的比较,在场景1时使用compare1定义的规则,在场景2时,使用compare2定义的规则,则可如下使用:
bool compare1(const string &s1,const string &s2)
bool compare2(const string &s1,const string &s2)
……
pCompare p = 0
if (条件1)
p = compare1
else if (条件2)
p = compare2
……
else
……
//调用方式一:
return p(s1,s2)
//调用方式二:
return (*p)(s1,s2)
5、当然也可以使用注册函数的方式,使用函数指针。
6、注意:如果函数指针没有初始化,或者本身的值还是0值,则不能不使用。这两个都很好理解,第一点:如果没有初始化函数指针,则不知道指向哪儿,该做什么处理,第二点:指向0,即还没有指向任何函数,也不知道怎么处理。
7、函数指针形参:函数的形参可以是指向函数的指针,如下两种形式。
(1)void UseBigger(const string &s1,const string &s2,bool (const string &s1,const string &s2))
(2)vod UseBigger(const string &s1,const string &s2,bool(*)(const string &s1,const string &s2))