指向函数的指针首先它是一个指针变量 ,但这个指针有点特殊,它指向一个函数,一个函数的函数名其实就是一个指针,它指向函数的代码。函数的调用过程既可以通过函数名来实现,也可以通过指向该函数的指针来实现。

  题目:比较两个整数的大小,根据需要得到其中的较大数或较小数。

代码文件:compare.c

#include <stdio.h>
#include <stdlib.h>

/**********************************************************************************
目标:理解指向函数类型的指针
重点:1)函数的调用既可以通过函数名来实现调用,也可以通过指向该函数的指针来实现调用。

*********************************************************************************
*/

int get_MAX(int,int);
int get_MIN(int,int);
int compare(int,int,int);


int main(int argc, char * argv[])
{
int a = 34;
int b = 7;
int flag = 1;
int ret = compare(a,b,flag);
printf("result is %d\n", ret);
}

int get_MAX(int a,int b)
{
return a>b?a:b;
}

int get_MIN(int a,int b)
{
return a<b?a:b;
}

/******************

参数flag为1时,代表要取较大数;为0时代表要取较小数

****************
*/
int compare(int a,int b,int flag)
{
int (*p)(int ,int); //注意,指向函数的指针的定义

if(flag==1)
p = get_MAX;
else
p = get_MIN;

return p(a,b); //通过一个指向函数的指针来切换调用不同的函数
}

运行结果:

小结:

1)指向函数的指针的定义一般形式是:

类型名 (*指针变量名) ()

2)此种指针的意义在于,存储不同的函数名,根据实际需要方便切换不同的函数调用。