学习日记 – 《C陷阱与缺陷》 – Day1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq573223251/article/details/53184173

第二章 语法“陷阱”

2.1 理解函数声明(有点复杂)

float *g();
float (*h)();

按照我们常规的思维一眼看上去,这两句代码应该是一样的吧,但事实上是完全不同的
第一句代码,g() 其实是等价于 (g()) ,意思是g()是一个返回值为 指向浮点数的指针 的函数
第二句代码, h是一个函数指针, 其所指向的函数的返回值为 浮点类型
原因在于 ()的结合优先级是高于*

然后,我们可以推理得到一个强制类型转换,这是一个“指向返回值为浮点类型的函数的指针”的类型转换符

((float)(*)())

事实上下面一句代码就是上一句的简写版

(*h)()
h()

根据上述的知识理解一下这个吧

(*(void(*)())0)()

Hit:

typedef void (*funcptr)();
(*(funcptr)0)();

猜你喜欢

转载自blog.csdn.net/qq573223251/article/details/53184173