void ( *signal( int sig, void (*func)(int) ) ) (int);解决办法

void ( *signal( int sig, void (*func)(int) ) ) (int);
各位前配帮我分解一下它的意思?

------解决方案--------------------
void ( *signal( int sig, void (*func)(int) ) ) (int); 
声明一个函数指针signal,signal有两个参数:一个int,一个是函数指针(参数int,无返回值),signal的返回值也是一个函数指针(参数为int,无返回值)
------解决方案--------------------
void ( *signal( int sig, void (*func)(int) ) ) (int); 
定义(一个无返回值类型的函数指针 函数参数一个(是int型) (一个是void型 函数指针类型参数类型是int))
------解决方案--------------------
探讨
void ( *signal( int sig, void (*func)(int) ) ) (int);
定义(一个无返回值类型的函数指针 函数参数一个(是int型) (一个是void型 函数指针类型参数类型是int))

------解决方案--------------------
探讨
那么外层的参数是干啥用的?

------解决方案--------------------
探讨
引用:
那么外层的参数是干啥用的?

是声明函数指针的参数类型的 是int型

------解决方案--------------------
1、声明了一个signal函数,
2、其返回类型为:void(*)(int)
3、它有两个参数,第一个sig为int类型,第二个func为void(*)(int)类型
------解决方案--------------------
举个例子:
C/C++ code

#include <stdio.h>

enum { RED, GREEN, BLUE };


void OutputSignal(int sig)
{
    printf("The signal you \'ve input is: ");

    switch(sig)
    {
    case RED:
        puts("RED!");
        break;

    case GREEN:
        puts("GREEN!");
        break;

    case BLUE:
        puts("BLUE!");
        break;
    }
}


void ( *signal( int sig, void (*func)(int) ) ) (int)
{
    puts("Hello, world!");

    func(sig);

    return func;
}


int main(void)
{
    (*signal(GREEN, &OutputSignal))(RED);

    return 0;
}

------解决方案--------------------
例子

 
1. 参数是一个函数指针

void signal(int sig, void (*func)(int) );
其中void (*func)(int) 是一个参数..这个参数是函数指针..不大好看..

2. 返回值是一个函数指针

void (*signal(int sig, int aaa) )(int) ;
假设除了返回值以外,,所有的函数声明为FUNC
简化为void (*FUNC)(int);

这只是函数FUNC返回值为void (*)(int)类型.


3. 参数,返回值都为函数指针

void (*FUNC)(int);
因为FUNC === signal(int sig, void (*func)(int))

替换之

void (*signal(int sig, void (*func)(int)))(int);




------解决方案--------------------
void ( *signal( int sig, void (*func)(int) ) ) (int);
singnal 是个指向一个函数的指针,并且他有两个参数一个是sig,令一个是(由一个指向函数的指针(*func)参数是int的的函数返回的函数)并且singnal的参数是int型的

------解决方案--------------------
探讨
void ( *signal( int sig, void (*func)(int) ) ) (int);
singnal 是个指向一个函数的指针,并且他有两个参数一个是sig,令一个是(由一个指向函数的指针(*func)参数是int的的函数返回的函数)并且singnal的参数是int型的

------解决方案--------------------
mark
------解决方案--------------------
void ( *signal( int sig, void (*func)(int) ) ) (int); 
这里有两个函数指针,先从最里面的说起,
void (*func)(int)是一个函数指针,只有一个参数,为整型,无返回值
*signal( int sig, void (*func)(int) )是一个函数指针
void ( *signal( int sig, void (*func)(int) ) ) (int); 该函数只要只有一个int的参数,无返回值。
这是我的理解,请指教
------解决方案--------------------
8楼和11楼正确.
是函数声明,返回值和第二个参数的类型都是函数指针void (*)(int).
其他说signal是函数指针的,不对.

void (* (*signal)( int sig, void (*func)(int) ) ) (int);