理解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 }

 

 

 

 

运行结果:

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值