Chinaunix首页 | 论坛 | 博客
  • 博客访问: 468087
  • 博文数量: 148
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 1553
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-23 23:09
文章分类

全部博文(148)

文章存档

2010年(6)

2009年(58)

2008年(84)

我的朋友

分类: C/C++

2008-07-18 16:52:18

今天看了一章unix的信号机制,结果看到一个函数声明:
 void(*signal(int signo,void(*func)(int)))(int);
有点糊涂,就google了一下,发现还是有关函数指针的问题没弄清楚。
----------------------------------------------------------
函数指针的声明:
 数据类型标识符 (*指针变量)(参数);void(*p_func)(int);
普通指针声明:
 数据类型标识符 *指针名; 例如:int * pt; 
这个函数指针指向的函数是:void func (int);函数名是func,参数是int,返回值是void.
--------------------------------------------------------------
函数指针指向的是函数,而不是普通的数据类型,所以就有他的特殊性,就是函数有返回值,这个返回值可以是任何类型,当它的返回值也是一个函数指针时,就有了上面的声明。
简化一下,声明一个这样的函数:
 void ( *func_name(int) ) (char);  函数声明 就如同  int func(int i);
 void ( *p_func) (int)             指针声明 就如同  int * p;
其中func_name是一个函数名,而不是指针变量,它的返回值也是一个函数指针,这个返回的函数指针指向的函数是这样的 void returnfunc( char ); 参数是char型,没有返回值。
 
---------------------------------------------------------------------
这里加一句,回调函数,把自己的地址当作参数传递给被调函数的函数交回调函数。被调函数中包含函数指针参数。
 
 
阅读(1628) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~