目录
- part1
- part2
两段有趣的代码
part1
(*(void (*)())0)();
我们知道函数指针:
void (*p)()
去掉函数指针变量名就是函数指针的类型:
void (*)()
那这段代码我们就可以理解为将0强制转换为函数指针类型,再进行解引用;进行调用函数;
这就意味着我们假设0地址处放着无参,返回类型是void的函数;
最终是调用0地址处放的函数;
part2
void (*signal(int , void(*)(int)))(int);
我们来将这个代码进行拆解:
也就是说,signal是一个函数,有两个参数,参数1是int类型,参数2是函数指针类型,返回值也是函数指针类型;
这个代码是在声明函数;
我们还可以用typedef来进行简化:
void (*signal(int , void(*)(int)))(int);
typedef void(*pf_t)(int); //简化
pf_t signal(int, pf_t);