jay*_*lee 11 c pointers function void
我已经搜索过但找不到任何结果(我的术语可能已关闭)所以请原谅我,如果以前曾经问过这个问题.
我想知道是否有一种简单的方法可以void*在不首先声明函数指针然后为函数指针分配地址的情况下调用C中的函数.
即.假设要调用的函数是typevoid(void)
void *ptr;
ptr = <some address>;
((void*())ptr)(); /* call ptr as function here */
Run Code Online (Sandbox Code Playgroud)
用上面的代码,我得到错误C2066:在VC2008中强制转换为函数类型是非法的
如果可能,具有返回类型和多个参数的函数的语法有何不同?
jam*_*lin 25
你的演员应该是:
((void (*)(void)) ptr)();
Run Code Online (Sandbox Code Playgroud)
通常,通过typedef为函数指针类型创建一个可以使这更简单:
typedef void (*func_type)(void);
((func_type) ptr)();
Run Code Online (Sandbox Code Playgroud)
但是,我应该指出,向函数指针或从函数指针投射普通指针(指向对象的指针)在标准C中并不严格合法(尽管它是一个常见的扩展).
Mar*_*tos 13
在转换为函数类型时,我非常困惑.键入dede函数指针类型更容易,更易读:
void *ptr = ...;
typedef void (*void_f)(void);
((void_f)ptr)();
Run Code Online (Sandbox Code Playgroud)
MSa*_*ers 12
在C++中: reinterpret_cast< void(*)() > (ptr) ()
使用会为reinterpret_cast您节省一组令人困惑的括号,并且< >明确地将类型与呼叫本身区分开来.