一、什么是函数指针数组?
函数指针数组本质是数组,存放的元素是函数指针类型的,即存放函数的地址。
函数指针数组的类型:
如下列代码,指针数组pfArr的类型是 int(*[2])(int, int)
[ ]的优先级比*高,pfArr先与[ ]结合,因此pfArr是数组
int (*) (int,int)是数组存放元素的类型,即函数指针类型
int Add(int x, int y) { return x + y; } int Sub(int x, int y) { return x - y; } int main() { int* pf1 = &Add; int* pf2 = ⋐ int(*pfArr[2])(int, int) = { pf1,pf2 };//数组中存放类型相同的元素 return 0; }
二、函数指针数组实现计算器小程序
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; } void Menu() { printf("********************\n"); printf("***** 1. 加法 *****\n"); printf("***** 2. 减法 *****\n"); printf("***** 3. 乘法 *****\n"); printf("***** 4. 除法 *****\n"); printf("***** 0. 结束 *****\n"); printf("********************\n"); } int main() { int(*pfArr[])(int, int) = { NULL,Add,Sub,Mul,Div }; int x = 0; int y = 0; int input = 0; do { Menu(); printf("请选择:>"); scanf("%d", &input); if (input == 0) { printf("退出程序\n"); } else if (input >= 1 && input <= 4) { printf("请输入两个操作数:>"); scanf("%d %d", &x, &y); printf("%d\n", pfArr[input](x, y)); } else { printf("非法输入,请重新输入\n"); } } while (input); return 0; }