在学习了函数指针变量的基础上,我们来研究两段比较有意思的代码
代码一:
(*(void (*)())0)();
- 由内向外分解
void (*)()这是一个函数指针类型
–void表示这个函数没有返回值
–(*)()表示这是一个指向函数的指针,该函数没有参数(void (*)())0这是一个强制转换类型
– 也就是把0当作函数地址了(*(void (*)())0)函数的解引用
– 前面加*,相当于调用0这个地址的函数(*(void (*)())0)()
– 后面加一个()相当于调用这个函数
代码二:
void (*signal(int , void(*)(int)))(int);
由内向外分解
void(*)(int)这是一个函数指针类型
– 指向一个函数的指针
– 该函数接受一个int参数
– 返回void(即不返回值)signal(int, void(*)(int))这是一个函数,接收两个参数
– 一个int类型的参数
– 一个函数指针参数void (* ... )(int)函数返回一个函数指针
– 指向一个函数的指针
– 该函数接受一个int参数
– 返回void

2364

被折叠的 条评论
为什么被折叠?



