理解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编辑  收藏  举报

导航