指向函数的指针首先它是一个指针变量 ,但这个指针有点特殊,它指向一个函数,一个函数的函数名其实就是一个指针,它指向函数的代码。函数的调用过程既可以通过函数名来实现,也可以通过指向该函数的指针来实现。
题目:比较两个整数的大小,根据需要得到其中的较大数或较小数。
代码文件: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)此种指针的意义在于,存储不同的函数名,根据实际需要方便切换不同的函数调用。