C/C++之函数指针

函数指针
函数指针指向的是函数而不是对象

函数的类型是由返回值和参数决定的,函数名并不是函数类型的一部分(不管函数名怎么起,不影响函数类型)

bool lengthCompare(const string &, const string &);
//其类型是:bool(const string&, const string&)
//嗯,这样理解函数指针就方便多了,我们只是定义了一个指针取代了函数的名字而已
bool (*pf)(const string &, const string &);


但若声明为:bool *pf(const string &, const string &);则是返回值为bool *,函数名为pf的函数,所以用括号先保证了指针(*pf)的存在

在使用函数名的时候,函数名其实已经转换为指针了。所以这个赋值没有问题:
pf = lengthCompare;//pf指向了名字为lengthCompare的函数。上面已经定义了pf为指针,lengthCompare是函数名

bool b1 = pf("hello", "goodbye"); //调用lengthCompare函数
bool b2 = (*pf)("hello", "goodbye"); //作用同上
bool b3 = lengthCompare("hello", "goodbye"); //作用同上

//直接拿上面的定义和新定义的函数举例
string::size_type sumLength(const string&, const string&);
bool cstringCompare(const char*, const char*);
pf = 0; //可以,pf没有指向任何函数
pf = sumLength; //错误,返回值类型不同
pf = cstringCompare; //错误,参数类型不同
pf = lengthCompare; //可以,返回值和参数类型都相同
/*这个例子进一步理解函数的类型:返回值和参数*/


同数组一样,不能直接返回数组,但是可以返回数组指针;同理,不能返回函数类型,只能返回函数指针

同数组作参数会被转换为数组指针一样,也没有函数类型的参数,写做参数时,自动转换为函数指针

//第三个参数转换为函数指针
void useBigger(const string &s1, const string &s2,
bool pf(const string &, const string &));
//第三个参数转换为函数指针
void useBigger(const string &s1, const string &s2,
bool (*pf)(const string &, const string &));
//调用上面声明的函数
useBigger(s1, s2, lengthCompare);


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值