zoukankan      html  css  js  c++  java
  • 理解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 }

    运行结果:

     
  • 相关阅读:
    Orika对象复制教程(完美笔记)
    JAVA-开发构建Gradle项目安装使用教程
    Java中传入一个时间范围,取出该时间范围内所有日期的集合
    线程安全之原子操作
    Java内存模型以及线程安全的可见性问题
    Java线程池的应用
    Java中实现线程的方式
    线程通信
    线程状态
    CPU缓存和内存屏障
  • 原文地址:https://www.cnblogs.com/CreatorKou/p/8525034.html
Copyright © 2011-2022 走看看