【C语法陷阱】:怎样理解(*(void(*)())0)()

2人阅读 评论(0) 收藏 举报
分类:


首先我们回忆一下C语言中变量是怎样声明的?任何C语言的变量声明都由两部分组成:类型、变量名(声明符)。
例如:int a,b;

接下来我们试着声明一个函数:
float  g( );  这个声明的含义是g是一个返回值为浮点类型的函数。

然后,我们在声明一个指针:
float *pf;  这个声明的含义是pf是一个指向浮点数的指针


★现在,我们分两步分析表达式(*(void(*)())0)().

①假设变量fp是一个函数指针,用(*fp)( );调用函数,因为fp是一个函数指针,*fp就是指针所指向的函数,所以(*fp)( );就可以调用该函数。
②函数运算符()的优先级高于单目运算符*。假设fp是指向一个无返回值类型的指针,调用它的方式为void(*fp)( ),此时fp变量的类型是void(*)( ),然后将常数0强制类型转换为(void(*fp)( ))0。因此,我们可以用void(*fp)( ))0代替fp,调用函数就是(void(*fp)( ))0)();
注:变量的类型就是把变量名去掉剩下的东西

 ●我们可以用typedef换一下上述表达式的类型名
 例如:typedef  void (*ff)( );因此, 调用函数的方式可以写成:(*(ff)0) ( );
查看评论

关于《C陷阱和缺陷》中的(*(void(*)())0)()表达式的一点解析

如《C陷阱和缺陷》书中所说,表达式(*(void(*)())0)()功能主要用于模拟在计算机启动时,作为硬件调用首地址为0的子程序的C语句。 对于第一次看到这个表达式的人,都会有无从下手的感觉。但通...
  • u012489250
  • u012489250
  • 2017-02-22 20:39:36
  • 633

c语言语法陷阱总结

学习C语言也有一段时间了,关于语法上的错误,现在基本上也没犯过,不过,我还是想小结一下。一、优先级问题运算优先级的问题,其实在背乘法表,的时候就已经开始接触了。那时候我们知道在加减乘除的混合运算中,先...
  • jhcconan614
  • jhcconan614
  • 2016-12-04 19:21:45
  • 278

《C陷阱与缺陷》:如何理解(*(void(*)())0)()?

有一次,一个程序员与我交谈一个问题。他当时正在编写一个独立运行于某种微处理器上的C程序。当计算机启动时,硬件将调用首地址为0位置的子例程。为了模拟开机启动时的情形,我们必须设计出一个C语句,以显式调用...
  • tennysonsky
  • tennysonsky
  • 2017-04-04 10:38:25
  • 19880

C语言中的 (void*)0 与 (void)0

前几天看到一个宏, 它大概是这样的:     #define assert_param(expr) ((expr) ? (void)0 : assert_failed((u8 *)__FILE__,...
  • shuju345
  • shuju345
  • 2015-08-17 14:19:40
  • 736

C语言中经常遇到的陷阱!好东西

本文来自:http://blog.csdn.net/zhzht19861011/article/details/17117819 0.前言           设备的可靠性涉及多个方面:稳定的...
  • dddd0216
  • dddd0216
  • 2016-05-17 18:09:11
  • 4068

C陷阱与缺陷学习笔记

N年读过这本书,当时读的时候囫囵吞枣,加上时间久远,90%的内容都忘记了。昨天在整理书籍的时候翻出来了,这本书短小精悍却不失为经典之作。抽出时间再拜读一遍,顺便做做笔记,记录精华。...
  • zfs2008zfs
  • zfs2008zfs
  • 2016-04-23 09:38:56
  • 1658

C陷阱与缺陷--笔记

原文链接:http://codeshold.me/2017/01/c_trapsandpitfalls.html
  • wuzhimang
  • wuzhimang
  • 2017-01-28 23:59:13
  • 1418

C陷阱与缺陷:经典的 (* (void (*)( )) 0) ( ) 表达式

C陷阱与缺陷第二章中提到了一个经典的(* (void (*)( )) 0) ( )表达式,如书中所说,也许很多人第一次看到这个表达式会有些“不寒而栗”,细细品味一下还是很有意思的。...
  • ddl007
  • ddl007
  • 2010-07-21 18:13:00
  • 468

C语言陷阱与缺陷(中文版+英文版)

  • 2009年12月23日 11:13
  • 4.78MB
  • 下载

《C陷阱与缺陷》总结

这本书不是对C语言的批判,而是列出了一些使用C语言常见的错误,以及一些看似简单的陷阱。对于提升对C语言的使用及认识有很大的作用!         该书主要讲解了词法分析、语法分析以及语义细...
  • u011795520
  • u011795520
  • 2016-06-14 21:37:09
  • 886
    个人资料
    持之以恒
    等级:
    访问量: 701
    积分: 332
    排名: 23万+
    文章存档
    最新评论