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;
}