#include <stdio.h> int add(int, int);//声明四个具有相同参数类型的不同功能的函数 int sub(int, int);//这四个函数的返回值是int型的 int mul(int, int); int div(int, int); typedef int(*FP_CALC)(int, int);//定义了指向这类函数的指针FP_CALC,类型和这类函数的返回类型相同 FP_CALC calc_func(char op);//这个函数返回指向这类函数的指针 int calc(int a, int b, char op);//这个函数调用上面的函数 int main() { int a = 100, b = 20; printf("calc(%d, %d, %c) = %d/n", a, b, '+', calc(a, b, '+')); printf("calc(%d, %d, %c) = %d/n", a, b, '-', calc(a, b, '-')); printf("calc(%d, %d, %c) = %d/n", a, b, '*', calc(a, b, '*')); printf("calc(%d, %d, %c) = %d/n", a, b, '/', calc(a, b, '/')); return (0); } int calc(int a, int b, char op) { FP_CALC fp = calc_func(op); if (fp) return fp(a,b); else return -1; }//函数定义,调用calc_func(),返回操作符对应的函数指针,用函数指针来调用函数 FP_CALC calc_func(char op) { switch(op) { case '+': return add; case '-': return sub; case '*': return mul; case '/': return div; default: return NULL; } return NULL; }//这个函数返回操作符对应的函数名(也就是指向函数的指针) 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 b? a/b: -1; }//四个函数的定义