函数指针简单了解

什么是函数指针,简单来看,其实它还是一个指针,只不过它指向一个函数,下面看一个简单的例子

 1 #include<stdio.h>
 2 int max(int x,int y)                            //定义一个函数用来返回两个数中较大的一个
 3 {
 4         return (x>y?x:y);    
 5 }
 6 int main()
 7 {
 8         int (*ptr)(int x,int y);                //定义一个函数指针,指向的函数返回值为int型,还有两个int型参数
 9         int a,b,c;
10         ptr=max;                                //把max函数的地址赋给ptr这个函数指针
11         scanf("%d %d",&a,&b);
12         c=(*ptr)(a,b);                          //通过调用ptr这个函数指针来来调用max函数 
13         printf("a=%d,b=%d,max=%d",a,b,c);
14         return 0;
15 }

其中第10行与ptr=&max 相同,函数名即为函数的地址,所以加不加&都可以。

第12行表示用一个函数指针去调用函数,还可以改为 c=ptr(a,b),这样表示直接用函数名去调用函数。

函数指针定义的时候要表明它指向函数的返回值的数据类型,还有参数个数以及各个参数的数据类型。

好了,了解什么是函数指针,再来看道题吧

 1 #include<stdio.h>
 2 int get_big(int i,int j)                                //一个求最大值的函数
 3 {
 4         return i>j?i:j;
 5 }
 6 int get_max(int i,int j,int k,int(*p)(int,int))         //这个函数有四个参数,其中一个为函数指针
 7 {
 8         int ret;
 9         ret=p(i,j);                                     //通过该指针调用get_big函数
10         ret=p(ret,k);
11         return ret;
12 }
13 int main()
14 {
15         int i=5,j=10,k=15,ret;
16         ret=get_max(i,j,k,get_big);                     //实参最后一个参数为函数名,传递给形参函数指针
17         printf("The max is %d",ret);
18         return 0;
19 }

函数指针还可以作为形参,当传递到一个函数内时,可以用该指针调用其他函数。

再看看其他例子

 1 #include<stdio.h>
 2 int get_big(int i,int j)                        //一个求最大值的函数
 3 {
 4         return i>j?i:j;
 5 }
 6 int (*get_function(int a))(int,int)    
 7 /*定义了一个get_function函数,该函数的返回值是一个函数指针,函数指针指向的函数返回值为int型,而且有两个int型参数*/
 8 {
 9         printf("the number is %d
",a);
10         return get_big;
11 }
12 
13 int main()
14 {
15         int i=5,j=10,max;
16         int (*p)(int,int);                      //定义函数指针
17         p=get_function(100);                    //将get_function的返回值赋给p这个函数指针
18         max=(*p)(i,j);                          //通过p调用get_big函数
19         printf("the max is %d",max);
20         return 0;
21 
22 
23 }

函数指针也可以作为一个函数的返回值的。

以上内容部分来自《linux c编程实战》这本书。

原文地址:https://www.cnblogs.com/kingos/p/4516951.html