【C/C++】函数指针与指针函数
函数指针,C语言中的“遥控器”,让你能像操作变量一样掌控函数!想让函数像快递一样传递?函数指针帮你搞定!比如,回调函数就像订餐时的五星好评,函数指针就是那张“五星好评卡”,随时随地调用你的函数。函数指针还能让你的代码更灵活,就像变色龙,适应各种场景。要不要让你的代码也玩转“遥控”?函数指针,等你来探索!
作者:柒号华仔
个人主页:欢迎访问我的主页
个人信条:星光不问赶路人,岁月不负有心人。
个人方向:主要方向为5G,同时兼顾其他网络协议,编解码协议,C/C++,linux,云原生等,感兴趣的小伙伴可以关注我,一起交流。
目录
-
- 1. 函数指针
-
- 1.1 概念定义
- 1.2 声明方法
- 1.3 调用方法
- 1.4 函数指针作为函数参数
- 1.5 函数指针数组
- 2. 指针函数
-
- 2.1 概念定义
- 2.2 调用方法
- 3. 总结
1. 函数指针
1.1 概念定义
函数指针是指向函数的指针变量。 因此函数指针本质上是一个指针变量,只不过该指针变量指向函数。指针变量也可以指向整型变量、字符型、数组,也可以指向函数。
C语言中,每一个函数都有一个入口地址,函数指针就指向函数的入口地址,可以通过函数指针来调用函数。
例如 :int (*fun)(int x,int y);
另外定义一个常用函数为 void func( ),那么fun=func; fun这时就是 func( )这个函数的入口地址了。
1.2 声明方法
函数指针的声明方法为:
返回值类型 ( * 指针变量名) ([形参列表])
“返回值类型”说明函数的返回类型,“(指针变量名 )”中的括号不能省,括号改变了运算符的优先级,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:
int func(int x); //声明一个函数int (*fun)(int x,int y); //声明一个函数指针 fun = func; // 将func函数的首地址赋给指针fun
或者将函数地址赋给函数指针:
fun = &func;
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针fun就指向函数func(x)的首地址。
1.3 调用方法
下面的实例说明了函数指针调用函数的方法:
#include //返回两个数中较大的一个int max(int a, int b){ return a>b ? a : b;}int main(){ int x, y, maxval1,maxval2; int (*pmax)(int, int); //定义函数指针 pmax = max; printf("Input two numbers:"); scanf("%d %d", &x, &y); maxval1 = (*pmax)(x,y); printf("Max value 1: %d\n", maxval1); maxval2 = pmax(x,y); printf("Max value 2: %d\n", maxval2); return 0;}
运行结果:
Input two numbers:5 8Max value 1: 8Max value 2: 8
maxval1 = (pmax)(x,y)对函数进行了调用。pmax 是一个函数指针,在前面加 * 就表示对它指向的函数进行调用。注意( )的优先级高于,第一个括号不能省略。
maxval2 = pmax(x,y),pmax就是函数max的入口地址,pmax(x,y)等同于max(x,y)。
注意这里pmax是一个指针变量,它可以指向任何函数,也就是说这里指向了函数max(),但它也可以再指向其他函数。如果我们直接调用函数名称,比如max,那么它是不可变的。
1.4 函数指针作为函数参数
#include //返回两个数中较大的一个int max(int a, int b){ return a>b ? a : b;}int fun(int (*pfun)(int, int), int a, int b){ pfun(a,b);}int main(){ int x, y, maxval