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

来源:互联网 发布:淘宝直播怎么看回放 编辑:程序博客网 时间:2024/06/05 02:31

第二章 语法“陷阱”

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

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

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

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

((float)(*)())

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

(*h)()h()

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

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

Hit:

typedef void (*funcptr)();(*(funcptr)0)();
0 0
原创粉丝点击