前言
函数指针数组又叫转移表,函数指针数组本质是一个数组,数组每个元素是指针,每个指针指向的是函数
一、函数指针数组的定义
函数指针数组的定义形如:int (*p[10])(int)。
首先p[10]是一个数组,数组与*结合,就变成了指针数组,这个指针数组有10个元素,每个元素指向一个函数,函数的形参为int类型,函数的返回值为int类型。
二、使用步骤
方法1
代码如下(示例):
#include <stdio.h>
int add(int a, int b)
{return a + b; }
int sub(int a, int b)
{return a - b; }
int mul(int a, int b)
{return a*b; }
int div(int a, int b)
{return a / b; }
int main()
{
int x, y;
int input = 1;
int ret = 0;
do
{
printf( "*************************\n" );
printf( " 1:add 2:sub \n" );
printf( " 3:mul 4:div \n" );
printf( "*************************\n" );
printf( "请选择:" );
scanf( "%d", &input);
switch (input)
{
case 1:
printf( "输入操作数:" );
scanf( "%d %d", &x, &y);
ret = add(x, y);
printf( "ret = %d\n", ret);
break;
case 2:
printf( "输入操作数:" );
scanf( "%d %d", &x, &y);
ret = sub(x, y);
printf( "ret = %d\n", ret);
break;
case 3:
printf( "输入操作数:" );
scanf( "%d %d", &x, &y);
ret = mul(x, y);
printf( "ret = %d\n", ret);
break;
case 4:
printf( "输入操作数:" );
scanf( "%d %d", &x, &y);
ret = div(x, y);
printf( "ret = %d\n", ret);
break;
case 0:
printf("退出程序\n");
breark;
default:
printf( "选择错误\n" );
break;
}
} while (input);
return 0; }
方法2
代码如下(示例):
#include<stdio.h>
void menu()
{
printf("*************************\n");
printf(" 1.add 2.sub \n");
printf(" 3.mul 4.div \n");
printf("*********0.exit.*********\n");
printf("请选择要进行的运算:");
}
int Add(int a,int b)
{
return a + b;
}
int Sub(int a, int b)
{
return a - b;
}
int Mul(int a, int b)
{
return a * b;
}
int Dvi(int a, int b)
{
return a / b;
}
int main()
{
int input,ret,a,b;
int (*p[5])(int, int) = { 0,Add ,Sub,Mul,Dvi };
do
{
menu();
scanf("%d", &input);
printf("请输入要计算的两数:");
scanf("%d%d", &a, &b);
if (input >= 1 && input <= 4)
{
ret = p[input](a, b);
printf("两数的运算结果为:%d\n", ret);
}
else if (input == 0)
printf("退出\n");
else printf("选择错误请重新选择\n");
} while (input);
}
总结
运用函数指针数组进行±*/运算更加简洁,当需要添加一个运算时,我们只需将函数指针数组多指向一个函数即可,而不用像方法1那样继续敲写一个case语句