前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >函数指针的用法

函数指针的用法

作者头像
全栈程序员站长
发布2022-07-09 12:31:04
发布2022-07-09 12:31:04
31900
代码可运行
举报
运行总次数:0
代码可运行

在C++编程的时候,有时候我在考虑,如果把一个函数能够当作一个变量,被调用、传递就会方便很多,之前学习了lambda表达式,用lamda表达式会比较方便。下面可以介绍一种新的方法,函数指针。

函数指针用例

代码语言:javascript
代码运行次数:0
复制
int add(int a,int b){
    return a+b;
}

void Widget::on_pushButton_clicked()
{

    int (*pfunc)(int a,int b);
    pfunc = add;
    qDebug()<<pfunc(1,2)<<endl;

}

  如上,通过一个简单了例子,可以看到函数指针的声明以及赋值、应用的过程。可以将例子变得复杂一点:

代码语言:javascript
代码运行次数:0
复制
int add(int a,int b){
    return a+b;
}

void Widget::on_pushButton_clicked()
{
    QMap<QString,int(*)(int,int)> toTest;
    toTest["test"] = add;
    qDebug()<<toTest["test"](1,2)<<endl;
}

  如果想要add函数为类中的非静态成员函数,代码可以写成:

widget.h

代码语言:javascript
代码运行次数:0
复制
int add(int a,int b);
QMap<QString,int(Widget::*)(int,int)> toTest;

  widget.cpp

代码语言:javascript
代码运行次数:0
复制
int Widget::add(int a,int b){
    return a+b;
}

void Widget::on_pushButton_clicked()
{
    toTest["test"] = add;
    qDebug()<<(this->*toTest["test"])(1,2)<<endl;
}

  如果add函数声明为静态成员函数,就方便多了。

widget.h

代码语言:javascript
代码运行次数:0
复制
static int add(int a,int b);

  widget.cpp

代码语言:javascript
代码运行次数:0
复制
int Widget::add(int a,int b){
    return a+b;
}

void Widget::on_pushButton_clicked()
{
    QMap<QString,int(*)(int,int)> toTest;
    toTest["test"] = add;//用&add也行
    qDebug()<<toTest["test"](1,2)<<endl;
}

  当我们把函数名作为一个右值使用时,此函数名会自动地转化为指针,当然,也可用取地址符(两者是等价的):

代码语言:javascript
代码运行次数:0
复制
toTest["test"] = add;
toTest["test"] = &add;

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/119437.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年11月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档