typedef学习

来源:互联网 发布:生化危机人工智能图片 编辑:程序博客网 时间:2024/06/05 17:31

1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针

    类型标识符    *函数名(参数表)

      int *f(xy);

float *fun();

float *p;

p = fun(a);


2、函数指针是指向函数的指针变量,即本质是一个指针变量。

 int (*f) (int x); /*声明一个函数指针 */

 f=func; /*func函数的首地址赋给指针f */ 

---------------------------------------------------------------

int(*s_calc_func(charop)) (int,int
等价于:

int (*F)(int,int)   F=s_calc_func(charop);

由于要先执行F,所以这里是相当于函数返回一个整型的函数,函数有两个整型参数,即:

  1. #include<stdio.h>  
  2.   
  3. typedef int(*FP_CALC)(int,int);  
  4. //注意这里不是函数声明而是函数定义,它是一个地址,你可以直接输出add看看  
  5. intadd(inta,intb)  
  6. {   
  7.      returna + b;  
  8. }   
  9. intsub(inta,intb)  
  10. {   
  11.      returna - b;  
  12. }   
  13. intmul(inta,intb)  
  14. {   
  15.      returna * b;  
  16. }   
  17. intdiv(inta,intb)  
  18. {   
  19.      returnb? a/b : -1;  
  20. }   
  21. //定义一个函数,参数为op,返回一个指针。该指针类型为 拥有两个int参数、  
  22. //返回类型为int的函数指针。它的作用是根据操作符返回相应函数的地址  
  23. FP_CALC calc_func(charop)   
  24. {   
  25.      switch(op)  
  26.      {   
  27.      case'+':returnadd;//返回函数的地址  
  28.      case'-':returnsub;  
  29.      case'*':returnmul;  
  30.      case'/':returndiv;  
  31.      default 
  32.          returnNULL;  
  33.      }   
  34.      returnNULL;  
  35. }   
  36. //s_calc_func为函数,它的参数是 op,  
  37. //返回值为一个拥有两个int参数、返回类型为int 的函数指针  
  38. int(*s_calc_func(charop)) (int,int 
  39. {   
  40.      returncalc_func(op);  
  41. }   
  42. //最终用户直接调用的函数,该函数接收两个int整数,和一个算术运算符,返回两数的运算结果  
  43. intcalc(inta,intb,charop)  
  44. {   
  45.      FP_CALC fp = calc_func(op); //根据预算符得到各种运算的函数的地址  
  46.          int(*s_fp)(int,int) =s_calc_func(op);//用于测试  
  47.          // ASSERT(fp ==s_fp);    //可以断言这俩是相等的  
  48.      if(fp)returnfp(a,b);//根据上一步得到的函数的地址调用相应函数,并返回结果  
  49.      elsereturn-1;  
  50. }   
  51.   
  52. void main()  
  53.     
  54.     inta = 100, b = 20;  
  55.   
  56.      printf("calc(%d, %d, %c) = %d\n", a,b,'+', calc(a, b,'+'));  
  57.      printf("calc(%d, %d, %c) = %d\n", a,b,'-', calc(a, b,'-'));  
  58.      printf("calc(%d, %d, %c) = %d\n", a,b,'*', calc(a, b,'*'));  
  59.      printf("calc(%d, %d, %c) = %d\n", a,b,'/', calc(a, b,'/'));  
  60. }


0 0
原创粉丝点击