⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_20664.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:20664 发表者:ahyu 发表日期:2002-11-08 11:47:59
<br>主题:这句话什么意思?
<br>内容:typedef int (*MatchFunc)(const char *pBuf, const char *pMatch);
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:CDMA2000 回复日期:2002-11-08 11:51:09
<br>内容:定义了一个函数指针<BR><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;回调函数是一个程序员不能显式调用的函数;通过将回调函数的地址传给调用者从而实现调用。要实现回调,必须首先定义函数指针。尽管定义的语法有点不可思议,但如果你熟悉函数声明的一般方法,便会发现函数指针的声明与函数声明非常类似。请看下面的例子:<BR><BR>void f();// 函数原型<BR><BR>上面的语句声明了一个函数,没有输入参数并返回void。那么函数指针的声明方法如下:<BR><BR>void (*) ();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;让我们来分析一下,左边圆括弧中的星号是函数指针声明的关键。另外两个元素是函数的返回类型(void)和由边圆括弧中的入口参数(本例中参数是空)。注意本例中还没有创建指针变量-只是声明了变量类型。目前可以用这个变量类型来创建类型定义名及用sizeof表达式获得函数指针的大小:<BR><BR>// 获得函数指针的大小<BR>unsigned psize = sizeof (void (*) ()); <BR><BR>// 为函数指针声明类型定义<BR>typedef void (*pfv) ();<BR><BR>pfv是一个函数指针,它指向的函数没有输入参数,返回类行为void。使用这个类型定义名可以隐藏复杂的函数指针语法。<BR><BR>指针变量应该有一个变量名:<BR><BR>void (*p) (); //p是指向某函数的指针<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;p是指向某函数的指针,该函数无输入参数,返回值的类型为void。左边圆括弧里星号后的就是指针变量名。有了指针变量便可以赋值,值的内容是署名匹配的函数名和返回类型。例如:<BR><BR>void func() <BR>{<BR>/* do something */<BR>} <BR>p = func; <BR><BR>p的赋值可以不同,但一定要是函数的地址,并且署名和返回类型相同。<BR><BR>传递回调函数的地址给调用者<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;现在可以将p传递给另一个函数(调用者)- caller(),它将调用p指向的函数,而此函数名是未知的:<BR><BR>void caller(void(*ptr)())<BR>{<BR>ptr(); /* 调用ptr指向的函数 */ <BR>}<BR>void func();<BR>int main()<BR>{<BR>p = func; <BR>caller(p); /* 传递函数地址到调用者 */<BR>}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;如果赋了不同的值给p(不同函数地址),那么调用者将调用不同地址的函数。赋值可以发生在运行时,这样使你能实现动态绑定。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -