C/C++之函数指针

来源:互联网 发布:新开淘宝小店日志 编辑:程序博客网 时间:2024/06/07 03:12
函数指针
函数指针指向的是函数而不是对象

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

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
原创粉丝点击