函数指针
指向函数的指针
函数名表示分配给这个函数的地址
用指针指向这个地址即可
void f(void);//函数声明
void (*pf)(void) = f;//定义函数指针
函数返回值类型 (*指针变量名)(函数的参数列表);
函数指针的使用
例程1
#include<stdio.h>
void f( int a ){ //定义三个函数
printf( "f() %d\n", a );
}
void g( int b ){
printf("g() %d\n", b);
}
void h( int c ){
printf("h() %d\n",c);
}
int main( int argc, char *argv[] )
{
int i;
printf("请输入一个数(0-2):");
scanf("%d", &i);
void (*fa[]) (int) = { f, g, h }; //定义一个函数指针数组
if( i>=0 && i<sizeof(fa)/sizeof(fa[0]) ){
(*fa[i]) (8) ; 后期添加函数不用动此部分,只需在数组中添加和写好函数体即可
}
return 0;
}
例程二
#include<stdio.h>
int plus (int a, int b){
return a+b;
}
int minus (int a, int b){
return a-b;
}
int cal( (*p)(int, int) ){ //把一个函数作为参数传给另一个函数
printf( "%d\n",(*P)(2,3) );
}
int main(int argc, char const *argv[])
{
cal(plus);//改变传入的参数就可以改变相应的功能
cal(minus);
return 0;
}
例程二改进版
#include<stdio.h>
int plus (int a, int b){
return a+b;
}
int minus (int a, int b){
return a-b;
}
void cal( int (*p)(int, int), int a, int b ){//给函数增加两个形参
printf( "%d\n",(*p)(a, b) );//声明此处传入函数的变量
}
int main(int argc, char const *argv[])
{
int a, b = 0;
scanf("%d %d",&a, &b);//实现函数对输入进行相应操作
cal (plus,a,b);
cal (minus,a,b);
return 0;
}
1.直接算出传入函数值不行,(*p)(2,3)输出时数字已经定好
2.只把传入函数(*p)的常量改为变量,也不行,报错变量未声明
3.给cal函数三个参数,这时候把传入函数的参数改成变量就没问题了