代码之家  ›  专栏  ›  技术社区  ›  jay.lee

将void*作为函数调用而不声明函数指针

  •  11
  • jay.lee  · 技术社区  · 16 年前

    我已经搜索了,但找不到任何结果(我的术语可能是关闭的),所以请原谅我,如果有人问过这个问题。

    我想知道有没有一个简单的方法 void*

    假设要调用的函数是类型 void(void)

    void *ptr;
    ptr = <some address>;
    ((void*())ptr)(); /* call ptr as function here */
    

    用上面的代码,我得到 在VC2008

    如果可能的话,对于返回类型和多个参数的函数,语法会有什么不同?

    3 回复  |  直到 8 年前
        1
  •  31
  •   jamesdlin    8 年前

    ((void (*)(void)) ptr)();
    

    typedef 对于函数指针类型:

    typedef void (*func_type)(void);
    ((func_type) ptr)();
    

    但是,我应该指出,在标准C中,将普通指针(指向对象的指针)转换为函数指针或从函数指针转换为普通指针并不完全合法(尽管这是一个常见的扩展)。

        2
  •  13
  •   Marcelo Cantos    16 年前

    当转换为函数类型时,我感到非常困惑。typedef函数指针类型更简单、可读性更强:

    void *ptr = ...;
    typedef void (*void_f)(void);
    ((void_f)ptr)();
    
        3
  •  12
  •   MSalters    16 年前

    reinterpret_cast< void(*)() > (ptr) ()

    使用 reinterpret_cast 为您保存一组令人困惑的括号 < > 清楚地将类型与调用本身区分开来。