20250526-C++基础-函数指针
C++基础-函数指针
函数指针,顾名思义就是指向函数的指针,用一个变量来存储函数的地址,可以通过这个变量(指针)间接访问函数。(可以把函数指针名看作函数名来进行函数调用)。代码及说明如下:
#include <iostream>
#include<functional>using namespace std;class Test
{
public:int mul(int, int);
};int Test::mul(int a, int b)
{return a * b;
}int add(int num1, int num2)
{int sum = num1 + num2;return sum;
}int sub(int num1, int num2)
{return num1 - num2;
}int calc(int num1, int num2, int(*func)(int, int))
{return func(num1, num2);
}
int main()
{//1、获取函数地址与获取函数值cout << add << endl; //00007FF7288B1465cout << sub << endl; //00007FF7BDC51474cout << add(4, 5) << endl; //9//2、使用函数指针//语法:返回类型 (*指针名称)(参数列表);cout << "*****************2" << endl;int (*fp1)(int, int) = add;cout << (*fp1)(2, 3) << endl; //5cout << fp1(2, 3) << endl; //5//3.使用typedef简化函数指针cout << "*****************3" << endl;typedef int(*Fp)(int, int);Fp fp2 = add;cout << fp2(6, 9) << endl; //15//4.函数指针作为参数,将要执行的函数地址传过去cout << "*****************4" << endl;cout << calc(8, 2, add) << endl; //10cout << calc(8, 2, sub) << endl; //2//5.用functiona包装函数cout << "*****************5" << endl;function<int(int, int)> fp3 = add;cout << fp3(1, 2) << endl; //3//6.数组函数指针cout << "*****************6" << endl;int(*fps[])(int, int) = { add, sub };for (auto fp : fps)cout << fp(4, 2) << endl; //6 2function<int(int, int)> fps2[] = { add, sub };for (auto fp : fps2) cout << fp(2, 1) << endl; //3 1//7.类的成员函数指针cout << "*****************7" << endl;int(Test:: * fp4)(int, int) = &Test::mul;Test test;cout << (test.*fp4)(3, 4) << endl; //12}
输出结果:
00007FF701C9142E
00007FF701C910FA
9
*****************2
5
5
*****************3
15
*****************4
10
6
*****************5
3
*****************6
6
2
3
1
*****************7
12