当前位置:主页   - 电脑 - 程序设计 - C/C++
(*(void(*)())0)()
来源:网络   作者:   更新时间:2010-03-03
收藏此页】    【字号    】    【打印】    【关闭

  (*(void(*)())0)(),这是在C陷阱与缺陷中,关于解决计算机开机启动后,硬件读取首地址为0位置的子例程的代码。

  先看(*fp)(),fp是一个函数指针,*fp就是该指针所指向的函数,(*fp)()就是调用该函数的方式。

  我们按照题目要求假设可以的话,则字面上可以写成(*0)();但是,正如(*fp)(),运算符*必须要一个

  指针来作操作数,并且是函数指针,这样经过运算符*作用后的结果才能作为函数被调用。因此 ,需要对0进行类型

  转换,转换后的意思可以描述为:指向返回值为void类型的函数的指针,其等价于( void (*) () )0。(*0)()加上

  0转换后的类型为(*(void(*)())0)()。

  当然,一下方式的书写可以使表达更明确:

  typedef void (*func)();//定义了一个指向返回值是void类型的函数指针

  (*(func)0)(); //用上面的指针实现强制转换

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明