(*(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)()则可以运行该函数。
本文深入探讨了C语言中复杂指针与函数的使用,特别是(*(void(*)())0)()这一表达式的详细解释。文章区分了float*f()与float(*f)()的不同,并解析了复杂表达式的组成规律。
503

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



