码迷,mamicode.com
首页 > 其他好文 > 详细

函数指针和回调函数

时间:2015-07-23 23:39:22      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

函数指针

  函数指针是指向函数调用地址的指针。它和函数名究竟有什么关系呢?且看下文。

且看一小程序

  首先,先请看下边程序:

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 void func(string s)
 6 {
 7     cout << s << endl;
 8 }
 9 
10 void (*pFunc)(string s);    // 不能够写成 void *pFunc(string s); 
11                             // 继续看下文解释
12 
13 int main()
14 {
15     cout << endl;
16     func("Original Function : 1st circumstance!");
17     (*func)("Original Function : 2nd circumstance!");
18 
19     cout << endl;
20     pFunc = &func;
21     (*pFunc)("Function pointer : 1st circumstance!");
22     pFunc("Function pointer : 2nd circumstance!");
23 
24     cout << endl;
25     pFunc = func;
26     (*pFunc)("Function pointer : 3rd circumstance!");
27     pFunc("Function pointer : 4th circumstance!");
28 
29     return 0;
30 }

  程序的运行结果如下:

  技术分享

 

  从上边程序,我们可以得到下边结论

  1. 函数指针和函数名本质上是一样的,都是指向函数调用地址的指针,只是函数名是常量指针,函数指针是变量。

  2. 调用函数的写法func()、(*func)()均可,而我们大多数情况下都会写成前者,应该是(C/C++标准制定者)为了方便大家对函数的调用。 

void (*pFunc)()与void* pFunc()区别 

  对于前者,我们都知道pFunc是函数指针变量,函数的返回值是空(void)。

  对于后者而言,情况却很不一样。pFunc是函数指针常量,函数的返回值是void指针。

回调函数

   回调函数其实就是一个通过函数指针调用的函数!假如你把A函数的指针当作参数传给B函数,然后在B函数中通过A函数传进来的这个指针调用A函数,那么这就是回调机制。A函数就是回调函数,而通常情况下,A函数是系统在符合你设定条件的情况下会自动执行。

  例如Linux下的多线程创建函数

#include <pthread.h>
int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
// 返回:若成功返回0,否则返回错误编号

中的 start_rtn 就是一个回调函数。

  关于回调函数详细可参考知乎上问答回调函数(callback)是什么?

 

函数指针和回调函数

标签:

原文地址:http://www.cnblogs.com/xiehongfeng100/p/4671958.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!