zoukankan      html  css  js  c++  java
  • 详解C/C++函数指针声明 ( *( void(*)())0)();

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

    float
    *pf; 这个声明的含义是*pf是一个浮点数,也就是说,pf是一个指向浮点数的指针。 float *g() , (*h)(); 表示*g()与(*h)()是浮点表达式。因为()结合优先级高于*,*g()也就是*(g()):g是一个函数,该函数的返回值类型为指向浮点数的指针。同理,可以得出h是一个函数指针,h所指向函数的返回值为浮点类型。 float (*h)(); 表示h是一个指向返回值为浮点类型的函数的指针,因此, (float (*)()) 表示一个“指向返回值为浮点类型的函数的指针”的类型转换符。 第一步,假定变量fp是一个函数指针,那么如何调用fp所指向的函数呢?调用方法如下:(*fp)(); 因为fp是一个函数指针,那么*fp就是该指针所指向的函数,所以(*fp)()就是调用该函数的方式。 表达式(*fp)()中,*fp两侧的括号非常重要,因为函数运算符()的优先级高于单目运算符*。如果*fp两侧没有括号,那么*fp()实际上与*(fp())的含义完全一致。 (*0)() 上式并不能生效,因为运算符*必须要一个指针来做操作数。而且这个指针还应该是一个函数指针,这样经运算符*作用后的结果才能作为函数被调用。因此,在上式中必须对0作类型转换,转换后的类型可以大致描述为:“指向返回值为void类型的函数的指针”。 因此,将常数0转型为“指向返回值为void的函数的指针”类型,可以这样写: (void (*)())0 当然,我们用typedef来解决这个问题能够表述更加清晰: 1 2 typedef void (*fp)();//声明一个函数指针类型fp (*(fp)0)();//对0转换为函数指针类型,*(函数指针)就是函数本身,
  • 相关阅读:
    【HTML5】元素<script>与<noscript>的使用
    【HTML5】元素<head>的使用
    【HTML5】交互元素menu&command元素
    【HTML5】summary交互元素
    【HTML5】用脚本控制交互元素details元素的使用
    【BIEE】页面跳转以及跳转后返回
    (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作
    哪些年是闰年
    工程师职称评定条件
    linux 网络编程-基础篇01
  • 原文地址:https://www.cnblogs.com/yaowen/p/4797354.html
Copyright © 2011-2022 走看看