函数指针数组:
声明:
声明一个数组,里面存储的类型是指向函数的指针。
或者说是函数指针数组就是存放多个函数指针的数组,但它的形式较为复杂。
用途:
函数指针数组的用途:转移表
实例:
制作一个简易计算器
void menu()
{
printf("**********************\n");
printf("****** 0.exit ******\n");
printf("****1.add 2.sub****\n");
printf("****3.mul 4.div****\n");
printf("****** 5.rox *******\n");
printf("**********************\n");
}
int Add(int x,int y)//加法
{
return x+y;
}
int Sub(int x,int y)//减法
{
return x-y;
}
int Mul(int x,int y)//乘法
{
return x*y;
}
int Div(int x,int y)//除法
{
return x/y;
}
int Xor(int x,int y)//异或
{
return x^y;
}
int main()
{
int (*arr[])(int,int)={0,Add,Sub,Mul,Div,Xor};
int x=0;
int y=0;
int input=0;
do
{
menu();
printf("请输入操作方法\n");
scanf("%d",&input);
if(input>=1&&input<=5)
{
printf("请输入:\n");
scanf("%d %d",&x,&y);
int ret=arr[input](x,y);
printf("%d\n",ret);
}
else if(input==0)
{
printf("退出程序\n");
}
else
{
printf("输入错误,请重新输入\n");
}
}while(input);
return 0;
}
回调函数:
1.定义:
回调函数是一个被作为参数传递的函数。利用函数指针,来在函数内部调用不同的函数。
例如:下面这个就是回调函数
void test()
{
printf("hello world!\n");
}
void print(void (*pfun)()) //这个函数就叫回调函数
{
if(1)
pfun();
}
int main()
{
print(test);
}
print的形参是一个函数指针,只要给函数不同的函数地址实参,就能调用不同的函数。而这里print就是一个回调函数。