代码一:(*(void(*)())0)()
首先代码(void(*)())0
是将0强制装换为函数指针类型,然后对它解引用得到0地址处的函数。这个函数无参数和返回类型,这是一个函数的调用。
代码二:void (*signal(int,void(*)(int)))(int)
首先这是一个是一个函数的声明,signal函数的有两个参数一个是int类型的,一个是函数指针类型的,这个函数指针有一个int类型的参数,返回值是void。然后signal函数的返回值为void(*)(int)
这也是一个函数指针,有一个int类型的参数,返回值为void。
对上边的代码二我们可以简化一下
typedef void(*pfun_t)(int)
pfun_t signal(int ,pfun_t)
//将signal函数的返回类型void(*)(int)重命名为pfun_t,而signal函数的其中一个参数和signal函数的返回参数是一样的,所以可以写成上述表达式