C陷阱与缺陷--读书笔记

2020-06-10  本文已影响0人  陈星空
  1. 神奇的函数声明

这里先拆开来看float * g(); 这样就很容易看出来,这是函数的声明,函数名g,返回值是float*
第二个是float (*h) ();这样子看,也很容易看出来这是一个函数指针,(*h)是函数名,返回值是float

首先根据上面我们先写出一个返回值为void类型的函数指针
void (*fp) (),那么调用它的写法为:
(*fp)(); 或者fp(); 但是后者只是前者的简易写法,是编译器给我们提供了这种便利。前者才是正儿八经的标准写法。

然后我们想象如何写一个语句,将变量f转化为“指向返回值为void的函数的指针”,很容易我们可以得到下面的式子:
(void (*)()) f
然后f可以是0,所以我们得到这样的式子:
(void (*)()) 0
现在看是不是很接近了,和一开始的神奇的表达式对比;
这个表达式的意思其实是将0转化为返回值为void的函数指针,然后我们使用调用函数指针的标准语法调用这个函数,即可。
接下来我们用这个式子代替指针函数调用(*fp)();中的fp,可以得到:
(*(void(*)())0) ()

上一篇 下一篇

猜你喜欢

热点阅读