美文网首页
C陷阱与缺陷--读书笔记

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

作者: 陈星空 | 来源:发表于2020-06-10 20:47 被阅读0次
  1. 神奇的函数声明
  • float *g(), (*h)();

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

  • (*(void(*)())0) ()
    据说这是当计算机启动时,硬件将调用首地址为0位置的程序,然后为了显示模拟这一行为,写了上面这一神奇的语句。。。
    按照上面的思路分析一下这个表达式:

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

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

相关文章

  • 第02章 语法"陷阱"

    《C陷阱与缺陷》 Andrew Koenig 读书笔记 附录来自网络 2.1 理解函数的声明 2.1.1 如何声...

  • 第01章 词法"陷阱"

    《C陷阱与缺陷》 Andrew Koenig 读书笔记 1.1 =和== 编写时建议:将变量放到==的后方,编译器...

  • C语言中的词法陷阱

    该文章为笔记,因此许多内容摘抄自《C陷阱与缺陷》。《C陷阱与缺陷》,全书不厚,但是感觉十分有提醒与启迪作用,值得阅...

  • 《C陷阱与缺陷》读书笔记

    词法分析中的“贪心法” 每个符号应该包含尽可能多的字符。a---b等同于(a--)-b。a+++++b被编译器视为...

  • 《C缺陷与陷阱》读书笔记

    最近因为工作需要开始重新拾起C语言,虽然说基本语法什么的没有太大问题(不行就网上搜索),但复习巩固下C语言也是不错...

  • 《C陷阱与缺陷》读书笔记

    多字符记号 输入流到给定字符串,识别成记号后,会尽可能包含之后字符构成最长字符串作为记号 组合赋值运算符是两个记号...

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

    神奇的函数声明 float *g(), (*h)(); 这里先拆开来看float * g(); 这样就很容易看出来...

  • 书籍推荐

    1.《C primer plus》----《C程序设计语言》-----《C和指针》、《C专家编程》、《C缺陷与陷阱...

  • 阅读书单

    《嵌入式Linux应用开发完全手册》 《抛弃c程序设计中的谬误与恶习》 《c陷阱与缺陷》 《征服c指针》 《c专家...

  • c陷阱与缺陷 读书笔记(一)

    程序设计错误实际上反映的是程序与程序员对该程序的“心智模式”两者的相异之处。 符号就是程序中的一个基本信息单元。 ...

网友评论

      本文标题:C陷阱与缺陷--读书笔记

      本文链接:https://www.haomeiwen.com/subject/xwpptktx.html