函数指针的初级学习

函数指针

函数指针是什么?

函数指针即为结合函数和指针,让函数也存在地址,并且让函数指针来存储函数的地址

函数指针有什么用?

注:(AI生成,仅供参考,目前我还没有用到函数指针)

  1. 灵活切换执行逻辑:不用修改核心代码,只需更换函数指针指向的函数,就能执行不同的逻辑(比如同一个计算框架,切换加法 / 减法 / 乘法函数)。
  2. 实现回调函数:让一个通用函数(如排序、遍历函数)能调用你自定义的函数(比如 qsort 传入自定义比较规则),这是函数指针最常用的场景。
  3. 解耦代码逻辑:把 “主流程” 和 “具体操作” 分开,主代码不用依赖具体函数,比如框架代码不用关心你写的业务函数,只通过指针调用即可,更易维护。
  4. 适配底层 / 框架需求:很多 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效果一样,本质是获取函数地址

调用函数指针的两种方法

  1. 直接调用
cout<<fun_ptr(2,3);

输出:

5
  1. 解引用后调用
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);
}
posted @ 2026-01-25 13:38  努力的小xu  阅读(1)  评论(0)    收藏  举报