首页 > 其他 > 详细

函数指针

时间:2014-04-11 21:50:44      阅读:591      评论:0      收藏:0      [点我收藏+]

 

 

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

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

 

  

bubuko.com,布布扣
void Fun( int a );

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

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

typedef  unsigned int UINT; 

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

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

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

bubuko.com,布布扣
FunType fun1 fun2;

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

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

bubuko.com,布布扣
#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);
}
bubuko.com,布布扣

这里打印的结果:

  65  66  67  68  69  70

  A    B   C     D    E    F

 

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

 

 

函数指针,布布扣,bubuko.com

函数指针

原文:http://www.cnblogs.com/crazyyer/p/3658975.html

(0)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!