*typedef函数指针用法

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

所以说pFun就是一个实实在在的指针变量,而不是一种类型

2.使用typedef更直观更方便

形式1:typedef  返回类型(*新类型)(参数表)

  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. }   

这时候的pFun还是一个实实在在的变量,但是用typedef搞出了一个等价类型PTRFUN ,就可以用这个PTRFUN 直接定义出函数指针变量了

 

* 结构体中的函数指针

我们首先定义一个名为Operation的函数指针:

typedef int (*Operation)(int a , int b );

再定义一个简单的名为STR的结构体

typedef  struct _str {
       int  result ; // 用来存储结果
       Operation  opt; // 函数指针 

 } STR;

现在来定义两个函数:Add和Multi:

//a和b相加
int Add (int a, int b){
    return a + b ;
}
//a和b相乘
int Multi (int a, int b){
    return a * b ;
}

现在我们可以写main函数,并且将函数指针指向正确的函数:

int main (int argc , char **argv){
      STR str_obj;
      str_obj.opt = Add;    //函数指针变量指向Add函数
      str_obj. result = str_obj.opt(5,3);
      printf (" the result is %d\n", str_obj.result );
      str_obj.opt= Multi;    //函数指针变量指向Multi函数 
      str_obj. result = str_obj.opt(5,3);
      printf (" the result is %d\n", str_obj.result );
      return 0 ;
}

这就是结构体中函数指针的用法,str_obj.opt(5,3);,跟c++的对象一样了,真好用,就可以仿造写出面向对象了