c++ Primer Plus读书笔记——函数指针

本文深入讲解了函数指针的基础知识,包括如何获取函数地址、声明函数指针以及如何使用函数指针来调用函数。通过具体实例,展示了函数指针在实际编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数指针的基础知识

完成一个函数指针,我们必须先完成下面的工作:

1、获取函数地址

2、声明一个函数指针

3、使用函数指针来调用函数

1、获取函数地址

获取函数指针很简单,只要使用函数名(后面不必跟参数)即可。也就是说,如果think()是一个函数,则think就是该函数的地址。要将函数作为参数进行传递,必须传递函数名。一定要区分传递的是函数的地址还是函数的返回值:

process(think);    //传递函数指针

process(think());  //传递函数返回值

2、声明函数指针

声明指向某种数据类型的指针时,必须指定指针指向的类型。所以声明函数指针时,必须指定函数类型,这意味着声明必须指定函数返回值的类型以及函数参数列表的类型。下面有一个函数正常声明和这个函数指针的声明:

double pam(int);

double (*pf)(int);

这是将(*pf)替换了pam,pam是一个函数,所以(*pf)也是一个函数,那么pf则是一个指针。

提示:通常,要声明指向特定类型的函数的指针,可以首先编写这种函数的原型,然后用(*pf)替换函数名,则pf就是函数指针。

正确声明函数指针之后我们就可以将函数名赋值给已经声明的函数指针:

double (*pf)(int); //注意(*pf)必须要用括号括起来否则会变成返回指针的函数

double pam(int);

pf = pam;//注意pam的参数列表和pf的必须要相同,不然编译器会报错

3、使用指针来调用函数

现在进入最后一步,即使用指针来调用被指向的函数。前面讲过,(*pf)扮演的角色与函数名相同,因此使用(*pf)时,只需要将它看做是函数名即可。

double pam(int);

double (*pf)(int);

pf = pam;

double x = pam(4);

double y = (*pf)(5);

实际上c++也允许像使用函数名那样使用pf,如下课件。虽然第一种格式不太好看,但是它给出了强有力的提示——代码正在使用函数指针。

double x = pf(5)

函数指针实例

//fun_ptr.cpp
#include <iostream>
double betsy(int);
double pam(int);

void estimate(int lines, double (*pf)(int));

int main()
{
    using namespace std;
    int code;
    cout << "How many lines of code do you need?";
    cin >> code;
    cout << "Here's Betsy's estimate:\n";
    estimate(code, betsy);
    cout << "Here's Pam's estimate:\n";
    estimate(code, pam);
    return ;
}

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))
{
    using namespace std;
    cout << lines << "lines will take ";
    cout << (*pf)(lines) << " hour(s)\n";
}

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值