理解apue中的signal function函数指针概念
#include <signal.h>
void (*signal(int signo, void (*func)(int)))(int);
Returns: previous disposition of signal (see following) if OK, SIG_ERR on error
signal函数,接收参数为:int signo(整数), void (*func)(int)(函数指针),返回为:指向接收一个int参数、返回为void的函数的指针
知识点参考:
pf() pf是一个无参数函数
* pf() pf是一个无参数函数,它的返回值是一个指针
( * pf() ) () pf是一个无参数函数,它的返回值是一个无参数函数的指针
* ( * pf() ) () pf是一个无参数函数,它的返回值是一个无参数函数的指针,这个函数的返回值又是一个指针
( * ( * pf() ) () ) () pf是一个无参数函数,它的返回值是一个无参数函数的指针,这个函数的返回值又是一个无参数函数的指针
int ( * ( * pf() ) () ) () pf是一个无参数函数,它的返回值是一个无参数函数的指针,这个函数的返回值又是一个无参数且返回值为int的函数的指针。
程序例子:
1 #include<iostream> 2 #include<memory> 3 using namespace std; 4 5 void fun(int x) 6 { 7 cout << "call fun : " << x << endl; 8 } 9 void (*funptr)(int); 10 11 void (*foo(int a,int b))(int x) 12 { 13 cout << "call foo : " << a << " " << b << endl; 14 return funptr; 15 } 16 17 int main() 18 { 19 funptr = fun; 20 foo(1,2)(1); 21 return 0; 22 }
在这个例子中,void (*foo(int a,int b))(int x)声明的直接就是函数类型,foo不是函数指针,如果foo是函数指针那么也就不能直接定义函数内容了,即这样写是错误的:
1 void (*foo)(int a) //error:函数指针在声明时不能同时定义 2 { 3 cout << "foo : " << a << endl; 4 }
运行结果:
posted on 2018-03-07 20:13 CreatorKou 阅读(198) 评论(0) 编辑 收藏 举报