函数指针

1、函数地址:是存储其机器语言代码的内存开始地址。优点:可以在不同时间使用不同的函数。

2、函数指针的声明:

//函数原型
double sum(double, double);
//函数指针声明
double (*ptrSum)(double, double)
//该语句声明了一个指针 ptrSum,指向一个函数
//double *ptrSum(double, double)
//这个语句不是函数指针,而是声明了一个函数ptrSum,返回double *类型。

3、函数指针应用
使用函数指针需要先定义函数再使用函数指针。
这里写图片描述
自定义头文件operation.h

#ifndef OPERATION_H_INCLUDED
#define OPERATION_H_INCLUDED

    #include <iostream>

    using namespace std;

    /** 加法 */
    double addition(double, double);
    /** 减法 */
    double subtraction(double, double);
    /** 乘法 */
    double multiplication(double, double);
    /** 除法 */
    double division(double, double);
    /** 打印计算结果 */
    void print_result(double (*)(double, double), double, double);

    void print_result(double (*ptrCalc)(double, double), double num1, double num2)
    {
        //调用函数,打印结果
        double result = ptrCalc(num1, num2);
        cout << result;
    }

    double addition(double num1, double num2)
    {
        int result = num1 + num2;
        return result;
    }
    double subtraction(double num1, double num2)
    {
        int result = num1 - num2;
        return result;
    }
    double multiplication(double num1, double num2)
    {
        int result = num1 * num2;
        return result;
    }
    double division(double num1, double num2)
    {
        if(num2 == 0)
        {
            cout << "输入的数字不合法!" << endl;
        }
        else
        {
            int result = num1 / num2;
        return result;
        }

    }


#endif // OPERATION_H_INCLUDED

main.cpp

#include <iostream>
#include "operation.h"
using namespace std;

int main()
{
    //定义函数指针
    double (*ptrCalc)(double, double);
    double num1, num2;
    cout << "请输入两个操作数: ";
    cin >> num1 >> num2;
    char operate;
    cout << "请输入运算符:(+ - * /):";
    cin >> operate;
    switch (operate)
    {
        case '+':
            //addition(num1, num2);
            ptrCalc = addition;
            break;
        case '-':
            //subtraction(num1, num2);
            ptrCalc  = subtraction;
            break;
        case '*':
            //multiplication(num1, num2);
            ptrCalc  = multiplication;
            break;
        case '/':
            //division(num1, num2);
            ptrCalc  = division;
            break;
    }
    //调用
    print_result(ptrCalc, num1, num2);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值