函数指针
定义:可以理解为函数的地址,要知道函数名就是地址的概念,相当于数组名就是数组首元素地址
如何定义函数指针:int (*p)(int a,int b);
如何调用:(*p)(a,b);
简单示例:演示函数指针的定义,指向地址,调用
#include <stdio.h>
#include <stdlib.h>
void Printf_Hello()
{
printf("Hello world\n");
}
int main()
{
void (*p)();//定义的函数指针变量
p = Printf_Hello;//指向函数,函数名就是地址
(*p)();//函数指针的调用
system("pause");
return 0;
}
带返回值的demo
#include <stdio.h>
#include <stdlib.h>
int inReturn(int data)
{
return ++data;
}
int main()
{
int mark;
int (*p)(int data);//定义一个函数指针变量
p = inReturn;//指向函数,函数名就是地址
mark = (*p)(10); //调用
printf("return mark:%d\n",mark );
system("pause");
return 0;
}
作用之处
根据程序运行的过程中的不同情况,调用不同的函数
demo:有两个整数,由用户输入1,2或者3。如输入1,程序就给出a和b中的大者,输入2就给出a和b中的小者,输入3就给出a与b之和。
实现方法1:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a;
int b;
int mark;
printf("Input a:\n");
scanf("%d",&a);
printf("Input b:\n");
scanf("%d",&b);
while(1){
printf("Input mark:\n");
scanf("%d",&mark);
switch(mark){
case 1:
if(a>b){
printf("Max:%d\n",a);
}else{
printf("Max:%d\n",b);
}
break;
case 2:
if(a<b){
printf("Min:%d\n",a);
}else{
printf("Min:%d\n",b);
}
break;
case 3:
printf("sum:%d\n",a+b);
break;
}
}
system("pause");
return 0;
}
用函数指针实现
#include <stdio.h>
#include <stdlib.h>
int getMax(int data1,int data2)
{
return data1>data2 ? data1:data2;
}
int getMin(int data1,int data2)
{
return data1<data2 ? data1:data2;
}
int getSum(int data1,int data2)
{
return data1+data2;
}
int DataHandler(int data1,int data2,int (*pfunc)(int data1,int data2))
{
int ret;
ret = (*pfunc)(data1,data2);
return ret;
}
int main()
{
int a = 1;
int b = 2;
int cmd;
int ret;
int (*pfunc)(int data1,int data2);
while(1){
printf("1:getMax 2:getMin 3:getSum\n");
scanf("%d",&cmd);
switch(cmd){
case 1:
pfunc = getMax;
break;
case 2:
pfunc = getMin;
break;
case 3:
pfunc = getSum;
break;
default:
printf("输入错误\n");
exit(-1);
break;
}
ret = DataHandler(a,b,pfunc);
printf("ret:%d\n",ret);
}
system("pause");
return 0;
}