函数指针
函数指针是什么?
函数指针即为结合函数和指针,让函数也存在地址,并且让函数指针来存储函数的地址
函数指针有什么用?
注:(AI生成,仅供参考,目前我还没有用到函数指针)
- 灵活切换执行逻辑:不用修改核心代码,只需更换函数指针指向的函数,就能执行不同的逻辑(比如同一个计算框架,切换加法 / 减法 / 乘法函数)。
- 实现回调函数:让一个通用函数(如排序、遍历函数)能调用你自定义的函数(比如 qsort 传入自定义比较规则),这是函数指针最常用的场景。
- 解耦代码逻辑:把 “主流程” 和 “具体操作” 分开,主代码不用依赖具体函数,比如框架代码不用关心你写的业务函数,只通过指针调用即可,更易维护。
- 适配底层 / 框架需求:很多 C/C++ 系统函数、底层框架(如操作系统 API、硬件驱动)需要用函数指针接收用户自定义的逻辑,是实现 “自定义扩展” 的基础。
函数指针的用法
假设定义一个加法函数
int add(int a,int b){return a+b;}
创建变量方法(假设变量叫做fun_ptr)
int(fun_ptr)(int,int); //函数返回值类型(函数指针名称)(参数类型1,参数类型2)
fun_ptr=add //函数名即为首地址,与&add效果一样,本质是获取函数地址
调用函数指针的两种方法
- 直接调用
cout<<fun_ptr(2,3);
输出:
5
- 解引用后调用
cout<<(*fun_ptr)(2,3);
输出:
5
运用函数指针
下面这个计算机即为函数指针的运用
#include<iostream>
using namespace std;int add(int a, int b) {return a + b;
}int subtract(int a, int b) {return a - b;
}int multiply(int a, int b) {return a * b;
}int divide(int a, int b) {if (b == 0) {cout << "除数不能为0!" << endl;return 0;}return a / b;
}int main() {int n;cout << "该程序为计算器,输入1为加法,2为减法,3为乘法,4为除法(取整)"<<endl<<"请输入运算方法:";cin >> n;int(*fun_ptr)(int, int)=nullptr;switch (n) {case 1:fun_ptr = add; break;case 2:fun_ptr = subtract; break;case 3:fun_ptr = multiply; break;case 4:fun_ptr = divide; break;default:cout << "输入错误!"; return 1;}int a, b;cout << "请输入第一个数字:";cin >> a;cout << "请输入第二个数字:";cin >> b;cout << "运算结果为:" << (*fun_ptr)(a, b);
}