今天看了一章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型,没有返回值。
---------------------------------------------------------------------
这里加一句,回调函数,把自己的地址当作参数传递给被调函数的函数交回调函数。被调函数中包含函数指针参数。
阅读(1667) | 评论(0) | 转发(0) |