在看《c陷阱与缺陷》时,有这么一个复杂声明
1 | (*(void(*)())0)(); |
起初看上去的确挺头疼的,思考了许久突然就有了思路,我的突破点在那个0。
(void(*)())0,0前面的括号与我们平常见的强制类型转换符极其相似
1 | int x = (int)y; |
所以这是将0强制转换成某种类型。
再看括号中的void(*)(),
1 | void (*p)();//这是一个函数指针,指向返回值为void,没有参数的函数 |
而将其去掉变量名p,则为强制转换类型符,强制转换为函数指针类型。
所以(void (*))0 是将常数0强制转换为函数指针类型。
整个表达式的意思是调用0这个函数指针所指向的函数。
1 | int MAX(int,int); |