函数指针回调函数

1.函数指针实例一

主要想说明的是如何用函数指针去访问一个 函数

#include <iostream>
using namespace std;
char(*pFun)(int);
char Fun1(int a)
{ 
    cout << a << endl;
    return a; 
}
void main()
{
    pFun = Fun1;
    (*pFun)(100);
    system("pause");
}

2.函数指针实例二

主要想说明回调函数的常规用方法,用typedef去做,如何实现

#include <iostream>
using namespace std;
typedef char(*PFUN)(int);
PFUN pFun;
char Fun1(int a)
{ 
    cout << a << endl;
    return a; 
}
void main()
{
    pFun = Fun1;
    (*pFun)(100);
    system("pause");
}

3.函数指针实例三

主要为了说明如何用函数指针访问不同的函数,
前提是这些函数返回值类型相同,参数个数和类型也相同
当然这些函数就是实现不同的效果的。

#include <iostream>
using namespace std;
typedef char(*PFUN)(int);
PFUN pFun;
char Fun1(int a)
{ 
    cout << a << endl;
    return a; 
}
char Fun2(int a)
{
    cout << 3 * a << endl;
    return 3 * a;
}
void main()
{
    pFun = Fun1;
    char chFun1 = (*pFun)(100);
    cout << "cFun1 = " << (int)chFun1 << endl;
    pFun = Fun2;
    char chFun2 = (*pFun)(300);
    cout << "cFun2 = " << (int)chFun2 << endl;
    system("pause");
}

4.函数指针实例四

主要是为了说明
(1)typedef 如何结合函数指针使用
(2)函数指针如何指向不同的函数(注意前提条件:返回值类型,参数个数和类型都要跟声明的函数指针的类型是一样的)
(3)switch case 实现返回不同的函数地址

#include <iostream>
using namespace std;
typedef int(*FP_CALC)(int, int);//定义一个函数指针类型  
int add(int a, int b)
{
    return a + b;
}

int sub(int a, int b)
{
    return a - b;
}

int mul(int a, int b)
{
    return a * b;
}

int div1(int a, int b)
{
    return b ? a / b : -1;
}

FP_CALC calc_func(char op)
{
    switch (op)
    {
    case '+':
        return add;
    case '-':
        return sub;
    case '*':
        return mul;
    case '/':
        return div1;
    default:
        return NULL;
    }
    return NULL;
}
int calc(int a, int b, char op)
{
    FP_CALC fp = calc_func(op);
    if (fp)
        return fp(a, b);
    else
        return -1;
}
void main()
{
    int a, b;
    bool bRet = false;
    do
    {
        cout << "请输入a,b的值:(相加)";
        cin >> a >> b;
        cout << "calc(" << a << "," << b << ", '+') = " << calc(a, b, '+') << endl;
        cout << "请输入a,b的值:(相减)";
        cin >> a >> b;
        cout << "calc(" << a << "," << b << ", '-') = " << calc(a, b, '-') << endl;
        cout << "请输入a,b的值:(相乘)";
        cin >> a >> b;
        cout << "calc(" << a << "," << b << ", '*') = " << calc(a, b, '*') << endl;
        cout << "请输入a,b的值:(相除)";
        cin >> a >> b;
        cout << "calc(" << a << "," << b << ", '/') = " << calc(a, b, '/') << endl;
    } while (!bRet);
    system("pause");
}

本博客的写作参考了此篇文章

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值