函数指针和回调函数详细说明

函数名可以理解为数组名,表示函数体的首地址,并不是完全意义上的函数指针。

char func() 定义函数返回值为char形  
int * func1(char a)定义函数返回值为int形的指针

简单的函数指针的用法

形式:返回类型(*函数名)(参数表)

char(*pFun)(int);

//typedef char(*pFun)(int)   //跟上一行功能等同

/*typedef的功能是定义新的类型。第一句就是定义了一种PTRFUN的类型,并定义这种类型为指向某种函数的指针,这种函数以一个int为参数并返回char类型。此部分在下文详细说明*/

char glFun(int a)
{
    return;
}
void main()
{
     pFun =glFun;       //函数指针 pFun,指向函数  glFun
     (*pFun)(2);
}

利用typedef定义函数指针

(一)、typedef int (*MYFUN)(int, int); 
              这种用法一般用在给函数定义别名的时候
             上面的例子定义MYFUN 是一个函数指针, 函数类型是带两个int 参数, 返回一个int 
             在分析这种形式的定义的时候可以用下面的方法: 
             先去掉typedef 和别名, 剩下的就是原变量的类型. 
             去掉typedef和MYFUN以后就剩: 
             int (*)(int, int)     为函数指针
             MYFUN  funcptr;   通过MYFUN   定义int (*)(int, int)的函数指针变量

typedef的功能是定义新的类型。定义了一种MYFUN的类型,这种类型为指向某种函数的指针,这种函数以两个int为参数并返回int类型。后面就可以像使用int,char一样使用MYFUN了。MYFUN  pFun;      定义函数指针变量pFun。

(二)、利用typedef 定义了一个新的类型,这种类型是一个函数:
              typedef void myfun(int a,int b);
              然后可以用这个类型定义一个指针,这个指针指向一个函数.
              myfun    *fun1;
              myfun    *fun2;

不管使用上面的哪一种方法来定义函数指针,参考int *p,在使用时候,*p才代表其本身,p代表为地址,因此在调用函数的时候,必须通过(*fun1)(.....)的方式进行函数指针的调用。

函数强制类型转化

(一)、 void func(int, int){.....};      //定义func函数
               int (*funcptr)(int, int);           //定义函数指针变量funcptr,具体类型为:int (*)(int ,int)
               将func的地址赋给funcptr函数指针,需要对普通函数func强制类型转化,如下:
               funcptr = (int (*)(int, int)) func;

(二)、如上文所讲用  typedef int (*MYFUN)(int, int);   定义函数指针后,可以直接通过:
              MYFUN  funcptr;   定义int (*)(int, int)的函数指针变量
              同时也可以使用新定义的MYFUN 类型,对普通函数func强制类型转化
              funcptr = (MYFUN )  func;

(三)、如上文所讲用typedef void myfun(int a,int b);  定义函数类型后,可以通过:
              myfun  *fun1;        定义函数指针
              同时也可以使用新定义的myfun 函数类型,对普通函数func强制类型转化
              funcptr = (myfun  *)  func;          //myfun只代表函数,而需要的却是指向函数的指针,因此需要myfun  *

方法(一)为原始的函数指针原型进行函数的类型转化,(二)通过定义的函数指针类型对函数进行转化,(三)通过定义的函数类型定义对应的指针对函数进行转化,参考(int *)a;

 

int* (*a[5])(int, char*); 是什么意思

带指针返回的函数指针数组,int* (*a[5])(int, char*);
int *函数返回值得类型是一个指针变量
(*a[5]) 函数指针名为a,共有5个元素
(int, char*); 带有两个参数int型参数和char指针型参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值