C++函数——函数指针

    与数据项类似, 函数也有地址。 函数的地址是存储其机器语言代码内存的开始地址。 可以将地址作为函数的参数,从而使第一个函数能够找到第二个函数, 并运行它。

    函数指针指向的是函数而非对象。

    想要声明一个可以指向函数的指针, 只需要用指针替换函数名即可。

bool lengthCompare(const string &, const string &); //函数
bool (*pf)(const string &, const string &); //函数指针

    pf是一个指向函数的指针, 其中该函数的参数是两个const string的引用, 返回值是布尔类型。

     注意: *pf两端的括号必不可少, 如果省略括号, 就变成了一个返回值为bool指针的函数, 而不是指向函数的指针。

    当我们把函数名作为一个值使用时, 该函数自动地转换成指针。 还可以直接使用指向函数的指针调用该函数。

#include<iostream>
#include<string>

using namespace std;
bool lengthCompare(const string &s1, const string &s2);
void display(const string &s1, const string &s2, bool(*p)(const string &, const string &));
int main()
{
    string name1 = "XiaoKun";
    string name2 = "ChenQian";

    //bool res = lengthCompare(name1, name2);

    //定义一个函数指针并给它赋值,pf是指向函数lengthCompare的指针
    bool(*pf)(const string &, const string &);
    pf = lengthCompare;
    /*res = pf(name1, name2);
    if (res == true)
    {
        cout << name1 << "的长度大于" << name2 << endl;
    }
    else
    {
        cout << name1 << "的长度小于" << name2 << endl;
    }*/

    //将pf作为实参传递给函数display
    display(name1, name2, pf);
    return 0;
}
//对比两个字符串的长度
bool lengthCompare(const string &s1, const string &s2)
{
    return size(s1) > size(s2) ? true : false;
}

//将函数指针作为参数传递给另外一个函数,可以直接在这个函数中通过函数指针调用函数指针指向的函数
void display(const string &s1, const string &s2, bool(*p)(const string &, const string &))
{
    if (p(s1, s2) == true)
    {
        cout << s1 << "的长度大于" << s2 << endl;
    }
    else
    {
        cout << s1 << "的长度小于" << s2 << endl;
    }
}

猜你喜欢

转载自blog.csdn.net/xiaokunzhang/article/details/80987978