(*(void(*)())0)()的声明让很多程序员感到害怕,今天来剖析(*(void(*)())0)()组成的规律
首先我们先理解 float *f()和float (*f)()之间的区别
由于()的结合优先级要比*要高,所以f()首先是一个函数,函数的返回值是指向float类型数据的指针。而(*f)首先是一个指针,然后再和(),所以它是一个指向函数的函数指针,函数的本身的返回值是一个float类型的数据。
float (*f)() 是一个指向返回值为float函数的指针,而(float (*)())为一个指向返回值为float函数的指针类型转换符。
对(*(void(*)())0)()进行分解首先对0用(void(*)())强制转化类型,使0是函数指针类型,然后(*(void(*)())0)进行取值。(*(void(*)())0)()则可以运行该函数。