当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

声明函数指针并实现回调[VC/C++编程]

赞助商链接



  本文“声明函数指针并实现回调[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

程序员常常需求实现回调.本文将谈论函数指针的基本原则并阐明若何利用函数指针实现回调.注意这里针对的是普通的函数,不包含完好依靠于差别语法和语义法则的类成员函数(类成员指针将在另文中谈论).

声明函数指针

回调函数是一个程序员不能显式调用的函数;通过将回调函数的地址传给调用者从而实现调用.要实现回调,必须首先定义函数指针.固然定义的语法有点难以想象,但假如你熟习函数声明的普通办法,便会发现函数指针的声明与函数声明非常近似.请看下面的例子:

void f();// 函数原型

上面的语句声明了一个函数,没有输入参数并返回void.那么函数指针的声明办法以下:

void (*) ();

让我们来解析一下,左边圆括弧中的星号是函数指针声明的关键.别的两个元素是函数的返回范例(void)和由边圆括弧中的进口参数(本例中参数是空).注意本例中还没有成立指针变量-只是声明了变量范例.目前可以用这个变量范例来成立范例定义名及用sizeof表达式得到函数指针的大小:

// 得到函数指针的大小

unsigned psize = sizeof (void (*) ());

// 为函数指针声明范例定义

typedef void (*pfv) ();

pfv是一个函数指针,它指向的函数没有输入参数,返回类行为void.利用这个范例定义名可以躲藏复杂的函数指针语法.

指针变量应当有一个变量名:

void (*p) (); //p是指向某函数的指针

p是指向某函数的指针,该函数无输入参数,返回值的范例为void.左边圆括弧里星号后的就是指针变量名.有了指针变量便可以赋值,值的内容是签名匹配的函数名和返回范例.比方:

void func()

{

/* do something */

}

p = func;

p的赋值可以差别,但一定如果函数的地址,并且签名和返回范例相同.

传送回调函数的地址给调用者

目前可以将p传送给另一个函数(调用者)- caller(),它将调用p指向的函数,而此函数名是未知的:

void caller(void(*ptr)())

{

ptr(); /* 调用ptr指向的函数 */

}

void func();

int main()

{

p = func;

caller(p); /* 传送函数地址到调用者 */

}

假如赋了差别的值给p(差别函数地址),那么调用者将调用差别地址的函数.赋值可以发生在运行时,这样使你能实现动态绑定.


  以上是“声明函数指针并实现回调[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 声明函数指针并实现回调
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .