本文是本人个人的学习笔记,个人理解,仅供参考
函数指针:即指向函数的指针
一般函数定义:类型(int float void) + 函数名 + ( 类型 变量 ,int date );
函数指针定义:类型 (指针) (类型 变量,int date ) //无用变量名可省略,只写类型
如:void (*p) ( 类型 变量 ,int date) int (*adk) (类型, int )
函数指针赋值:指针=函数名 如:p=jiajian //函数名
函数指针调用:(指针) (类型 变量 ,int date ) 如: (*p) ( )
可以理解成:定义一个函数类型( int(**)(int a) )的*p,取代函数名。相当于p存放的是函数的地址,函数名作为首地址,于是定义一个函数类型的指针如:int(*p)(int a),再把函数地址给它p=函数名。函数的调用是:函数名(数据),我们函数指针仿照调用:(*p)(数据)。就只是把函数名带换成了(*p).
作用: 若函数原型一样,可以共用一个指针
增加了代码可读性
例题:输入 1 ,求a,b最大值。输入 2 ,求a,b最小值。输入 3 ,求a,b和。
调用函数声明:
调用函数内容
主函数
全部代码
#include <stdio.h>
#include <stdlib.h>
int GetMax (int date1,int date2);
int GetMin (int date1,int date2);
int GetSum (int date1,int date2);
//此处pfun指向GetMax,GetMin,应和pfun函数指针类型一致.相当于在一定义一个指针
int dateHanger(int a,int b, int (*cfun)(int,int) ){
int result;
result=(*cfun)(a,b);
return result;
}
int main()
{
int cmd,a=1,b=99;
int result;
int (*pfun)(int f,int);//定义函数指针,无用变量名可写可不写
//输入 1 2 3
printf("请输入cmd的值");
scanf("%d",&cmd);
//定义函数指针,根据cmd,赋予不同函数
//可以随意替换函数
switch(cmd){//赋值
case 1:{pfun=GetMax;break;}
case 2:{pfun=GetMin;break;}
case 3:{pfun=GetSum;break;}
}
//调用函数指针
result=dateHanger(a,b,pfun); //result=(*pfun)(a,b);
//输出结果
printf("处理后 %d\n",result);
system("pause");
return 0;
}
int GetMax (int date1,int date2){
int Max;
Max=(date1>date2?date1:date2);
return Max;
}
int GetMin (int date1,int date2){
int Min;
Min=(date1<date2?date1:date2);
return Min;
}
int GetSum (int date1,int date2){
int Sum;
Sum=date1+date2;
return Sum;
}
输出结果: