函数指针

函数指针有两个用途:调用函数、做函数的参数

C++ Primer Plus函数指针 7.18

//fun_ptr.cpp--pointers to functions
#include <iostream>

using namespace std;

double betsy(int);
double pam(int);

//second argument is pointer to a type double function that
//takes a type int argument
void estimate(int lines, double (*pf)(int));

int main()
{
    int code;
    cout << "How many lines of code do you need?\n";
    cin >> code ;
    cout << "Here's Betsy's estimate:\n";
    estimate(code, betsy);
    cout << "Here's Pam's estimate:\n";
    estimate(code, pam);
    return 0;
}
double betsy(int lns)
{
    return 0.05 * lns;
}
double pam(int lns)
{
   return 0.03 * lns + 0.0004 * lns * lns;
}
void estimate(int lines, double (*pf)(int))
{
    cout << lines << "lines will take ";
    cout << (*pf)(lines) << "hour(s) \n";
}

1.调用函数

#include <iostream>

using namespace std;

int add(int, int);
int main()
{
    int (*ptrAdd)(int, int);//声明函数指针
    ptrAdd = add;//让声明的函数指针指向具体的函数,以便调用
                //则ptrPower可指向int(int,int)类型的函数。
                //ptrPower前面有*,说明ptrPower是指针,右侧是形参列表,表示ptrPower指向的是函数,
                //左侧为int,说明pf指向的函数返回值为int。
    cout << "ptrAdd(3,4) = " << ptrAdd(3,4) << endl;//与其指向的函数用法无异
    cout << "(*ptrAdd)(3,4) = " << (*ptrAdd)(3,4) << endl;//此处*pf两端括号必不可少
    return 0;
}
int add(int num1 ,int num2)
{
   int sum = num1 + num2;
   return sum;
}

2.做函数的参数

#include <iostream>
using namespace std;

int add(int, int);
int fun(int, int(*)(int,int));
int main()
{
    int (*ptrAdd)(int, int);//声明函数指针
    ptrAdd = add;//让声明的函数指针指向具体的函数,以便调用
                //则ptrPower可指向int(int,int)类型的函数。
                //ptrPower前面有*,说明ptrPower是指针,右侧是形参列表,表示ptrPower指向的是函数,
                //左侧为int,说明pf指向的函数返回值为int。
    cout << "ptrAdd(3,4) = " << ptrAdd(3,4) << endl;//与其指向的函数用法无异
    cout << "(*ptrAdd)(3,4) = " << (*ptrAdd)(3,4) << endl;//此处*pf两端括号必不可少
    int result = fun(6, ptrAdd);//把指向函数add的函数指针ptrAdd作为函数fun的形参传入函数fun中
    //int result = fun(6, add);//直接把函数add的地址作为函数fun的形参传入函数fun中,与上一句等效
    cout << "result = " << result << endl;
    return 0;
}
int add(int num1 ,int num2)
{
   int sum = num1 + num2;
   return sum;
}
int fun(int num3, int(*ptrFun)(int,int))
{
    int result = num3 - (*ptrFun)(5,6);
    return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值