一、概念
Notes:函数名就是地址,类比数组名就是地址!
二、如何定义?
类似定义普通变量,例如: int (*p)(int a,int b)、void (*p)()
三、如何调用?
1.直接访问(函数名);2.间接访问(函数指针)
#include <stdio.h>
int inCData(int data)
{
return ++data;
}
void printWelcome()
{
puts("程序启动,欢迎使用");
}
int main()
{
/*****函数名直接访问*****/
printWelcome();
printf("%d\n",inCData(10));
printf("====================\n");
/*****函数指针直接访问*****/
void (*p)();//定义一个函数指针变量;
int (*p2)(int data);
p = printWelcome;//指向函数,函数名=函数地址
p2 = inCData;
(*p)();//调用
printf("%d\n",(*p2)(10));
return 0;
}
四、编程实例
有两个整数a和b,由用户输入1,2或者3。如果输入1,程序就给出a和b中大值,输入2,就给出a和b中小值,输入3,则求a与b之和。
#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 = 10;
int b = 20;
int cmd;
int ret;
int(*pfunc)(int data1,int data2);//定义函数指针变量
printf("请输入1(最大值),2(最小值),或者3(求和)\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);
return 0;
}