typedef定义函数指针

来源:互联网 发布:erlang python 编辑:程序博客网 时间:2024/05/22 17:23

下面这篇博客讲解使用typedef定义函数指针,十分清晰。

http://blog.csdn.net/qll125596718/article/details/6891881

把上文中的例子记载下来,便于以后学习使用。

例子1.

  1. char (*pFun)(int);   
  2. char glFun(int a){ return (char)a;}   
  3. void main()   
  4. {   
  5.     pFun = glFun;   
  6.     (*pFun)(96);   
  7. }  


例子2.

  1. typedef char (*PTRFUN)(int);   
  2. PTRFUN pFun;   
  3. char glFun(int a){ return;}   
  4. void main()   
  5. {   
  6.     pFun = glFun;   
  7.     (*pFun)(2);   
  8. }   


例子3.

  1. #include <stdio.h>  
  2. #include <assert.h>  
  3.   
  4. typedef int (*FP_CALC)(int,int);//定义一个函数指针类型  
  5.   
  6. int add(int a, int b)  
  7. {  
  8.     return a + b;  
  9. }  
  10.   
  11. int sub(int a, int b)  
  12. {  
  13.     return a - b;  
  14. }  
  15.   
  16. int mul(int a, int b)  
  17. {  
  18.     return a * b;  
  19. }  
  20.   
  21. int div(int a, int b)  
  22. {  
  23.     return b ? a/b : -1;  
  24. }  
  25.   
  26. //定义一个函数,参数为op,返回一个指针,该指针类型为拥有两个int参数、  
  27. //返回类型为int的函数指针。它的作用是根据操作符返回相应函数的地址  
  28. FP_CALC calc_func(char op)  
  29. {  
  30.     switch( op )  
  31.     {  
  32.     case '+':  
  33.         return add;  
  34.     case '-':  
  35.         return sub;  
  36.     case '*':  
  37.         return mul;  
  38.     case '/':  
  39.         return div;  
  40.     default:  
  41.         return NULL;  
  42.     }  
  43.     return NULL;  
  44. }  
  45.   
  46. //s_calc_func为函数,它的参数是 op,     
  47. //返回值为一个拥有两个int参数、返回类型为int的函数指针    
  48. int (*s_calc_func(char op)) (int , int)  
  49. {  
  50.     return calc_func(op);  
  51. }  
  52.   
  53. //最终用户直接调用的函数,该函数接收两个int整数,  
  54. //和一个算术运算符,返回两数的运算结果  
  55. int calc(int a, int b, char op)  
  56. {  
  57.     FP_CALC fp = calc_func(op);  
  58.     int (*s_fp)(int,int) = s_calc_func(op);//用于测试  
  59.   
  60.     assert(fp == s_fp);// 可以断言这两个是相等的  
  61.   
  62.     if(fp)  
  63.         return fp(a,b);  
  64.     else  
  65.         return -1;  
  66. }  
  67.   
  68. void main()  
  69. {  
  70.     int a = 100, b = 20;  
  71.   
  72.     printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+'));  
  73.     printf("calc(%d, %d, %c) = %d\n", a, b, '-', calc(a, b, '-'));     
  74.     printf("calc(%d, %d, %c) = %d\n", a, b, '*', calc(a, b, '*'));     
  75.     printf("calc(%d, %d, %c) = %d\n", a, b, '/', calc(a, b, '/'));   
  76. }