函数指针

 

 

  首先,需要说明的是,一个函数名代表的是一个地址,即一个函数的首地址

  知道了这一点便很容易理解函数真正的意义了。

 

  

void Fun( int a );

void main()   
{   
    int (*pFun)(int);    //这里定义了一个函数指针pFun
    pFun = Fun;         //这里传值,可以任意形式如 pFun =&Fun,之类的,最后编译器都会认为是一个地址
    (*pFun)(2);
   }
void Fun( int a ) { return; }

接着,我定义出一种函数指针类型,方便我操作,比如我可以这样定义我的类型。

typedef  unsigned int UINT; 

同样的我的函数指针类型,也可以用typedef的方式定义出来,看起来稍微有点别扭

typedef void (*FunType)(int ); //这样只是定义一个函数指针类型,类型名叫FunType

然后我就可以在代码中生成FunType fun1;

FunType fun1 fun2;

void main()
{  
fun1
=&Fun; fun2 =Fun;
  
fun1(
20); (*fun)(20); //这里我们就可以看出 Fun 和fun1本事并没有区别,都是值函数指针。 }

最后,用一个回调函数加深 对函数指针的理解。

#include<stdio.h>
typedef  void (* Fun)(int);    // 定义一种函数指针类型  Fun 代表返回值为void 带一个int 参数的函数指针


void callback(int *a, Fun visit)
{
       int i;
       for (i = 0; i < 6; i++)  
       {
            visit(a[i]);
       }
       printf("\n");
}
//回调1
void print_int(int i)
{
     printf("%d    ", i);
    
}
//回调2
void print_char(int i)
{
           printf("%c    ", i); 
}
void main(void)
{
       int a[6]={65,66,67,68,69,70};   
       callback( a,print_int);
       callback( a,print_char);
}

这里打印的结果:

  65  66  67  68  69  70

  A    B   C     D    E    F

 

至此函数指针这个话题应该就理解了。

 

 

posted @ 2014-04-11 16:30  敷衍。  阅读(118)  评论(0编辑  收藏  举报