怎样理解代码(*(void(*)())0)()和void (*signal(int,void(*)(int)))(int)

代码一:(*(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函数的返回参数是一样的,所以可以写成上述表达式

猜你喜欢

转载自blog.csdn.net/hansionz/article/details/80871989
今日推荐