如何理解 (*(void(*)())0)()

(*(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)()则可以运行该函数。

上一篇:数据类型 - 扩展


下一篇:java面试题题库全1-20