函数名就代表函数的首地址(也称为入口地址),如果把函数名赋值给指针变量,那么这个指针变量指向函数所在的内存区域,可以通过指针变量找到并调用该函数。这种指针就是函数指针。
1.函数指针的定义形式
returnType (*pointerName)(param list);
实例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int add(int x,int y){
return x+y;
}
int main() {
int x=10;
int y=5;
int (*fn)(int,int) = add;
printf("x+y=%d\n",add(x,y));
printf("x+y=%d\n",fn(x,y));
printf("x+y=%d\n",(*fn)(x,y));
return 0;
}
运行结果:
x+y=15
x+y=15
x+y=15
综合案例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
double add(int x,int y) {
return x+y;
}
double sub(int x,int y) {
return x-y;
}
double multi(int x,int y) {
return x*y;
}
double divid(int x,int y) {
if(y ==0) {
return 0.0;
} else {
return x *1.0/ y;
}
}
int main() {
// 1.定义函数指针
double (*p)(int x, int y);
// 2.显示菜单
int x,y,choice;
printf("请输入两个整数:\n");
scanf("%d",&x);
scanf("%d",&y);
printf("请选择操作(1.加法 2.减法 3.乘法 4.除法):\n");
scanf("%d",&choice);
switch (choice) {
case 1:
p = add;
break;
case 2:
p = sub;
break;
case 3:
p = multi;
break;
case 4:
p = divid;
break;
}
double result = p(x,y);
printf("the result is:%f\n",result);
return 0;
}