原帖在这里:http://blog.sina.com.cn/s/blog_5e71ee700100fo13.html
我把里面的代码整理了一下,如下:
1 #include <stdio.h> 2 3 int add(int a, int b) 4 { 5 return a + b; 6 } 7 int sub(int a, int b) 8 { 9 return a - b; 10 } 11 int mul(int a, int b) 12 { 13 return a * b; 14 } 15 int div(int a, int b) 16 { 17 return b? a/b : -1; 18 } 19 20 typedef int (*FP_CALC)(int, int); 21 /*typedef的作用是用FP_CALC代表int (*)(int,int), 22 FP_CALC calc_func(char op)相当于int (*calc_func(char op))(int, int), 23 这是一个函数指针,返回值是一个函数的地址, 24 这个函数有两个int形参且返回值是int*/ 25 FP_CALC calc_func(char op) 26 { 27 switch (op) 28 { 29 case '+': return add; 30 case '-': return sub; 31 case '*': return mul; 32 case '/': return div; 33 default: 34 return NULL; 35 } 36 } 37 38 int calc(int a, int b, char op) 39 { 40 FP_CALC fp = calc_func(op); 41 /*FP_CALC fp相当于int (*fp)(int, int)*/ 42 if (fp) 43 return fp(a, b); 44 else 45 return -1; 46 } 47 void main() 48 { 49 int a = 100, b = 20; 50 printf("calc(%d, %d, %c) = %d ", a, b, '+', calc(a, b, '+')); 51 printf("calc(%d, %d, %c) = %d ", a, b, '-', calc(a, b, '-')); 52 printf("calc(%d, %d, %c) = %d ", a, b, '*', calc(a, b, '*')); 53 printf("calc(%d, %d, %c) = %d ", a, b, '/', calc(a, b, '/')); 54 }
运行结果如下: