C++函数指针

运行时函数代码存储在内存中,调用函数时需根据函数地址读取代码块;
那么函数是否可以被当作指针来使用,答案是肯定的。
要将函数作为参数传递,需传递函数名。
下例为评估两位员工编写代码所耗时间,将计算不同员工时间的函数作为参数传递

#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 << "Betsy's estimate:\n";
        estimate(code, betsy);
        cout << "Pam's estimate:\n";
        estimate(code, pam);
}

double betsy(int lns)
{
        return 0.05 * lns;
}

double pam(int lns)
{
        return 0.05 * lns + 0.005 * lns;
}

void estimate(int lines, double (*pf)(int))
{
        using namespace std;
        cout << lines << "lines will take ";
        cout << (*pf)(lines) << endl;
}
//结果
  How many lines of code do you need ? 30
  Betsy's estimate:
  30lines will take 1.5
  Pam's estimate:
  30lines will take 1.65

函数estimate()声明时,第二个参数double (pf)(int)声明了一个函数指针。调用时使用了betsy和pam两个函数名。
在C++中(
pf)和betsy,pam的意义相同,但格式不同。这产生了一个疑问,那么是否可以声明函数为(*betsy)(int)?C++时允许两种方式共存的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 指针是用来在程序中指向某一个变量的,实际上指针内存放的就是一个变量的相对内存地址(实际的物理地址还要加上一个...
    檀香静雪阅读 240评论 0 0
  • 首先需要明确,指针指向的是某种特定类型,而函数的类型由其参数及返回类型共同决定,与函数名无关。 函数声明: 所对应...
    落雪1117阅读 1,351评论 0 10
  • C++函数指针和Swift的函数对象 在C++中学习函数指针式非常痛苦的事情,而在Swift里面学习函数指针则是非...
    肆_春分阅读 1,243评论 0 0
  • 函数指针 & 返回函数指针的函数 一、函数指针的声明和使用 声明一个函数指针,给它赋值并调用它指向的函数 函数指针...
    wangawu121阅读 5,471评论 0 1
  • 函数指针和函数类型 函数指针指向的是函数而非对象。和其他指针类型一样,函数指针指向某种特定类型。 函数类型由它的返...
    georgeguo阅读 14,177评论 0 6