我可以直接调用函数指针吗?

时间:2014-07-03 21:30:50

标签: c++ c

我问的问题不会被用于制作,它只是纯粹的好奇心


我们说我有一个功能,它的原型是:

int myFunc(int, char*);

假设我知道静态内存地址(例如,0xC0DE),我可以这样做:

int (__cdecl* myFuncPtr)(int, char*) = (int(__cdecl*)(int, char*)) 0xC0DE;
myFuncPtr(1, "something");

现在,我能以某种方式在一行中调用该函数,而不是定义它吗?像这样:

((int(__cdecl*)) 0xC0DE)(1, "something");

2 个答案:

答案 0 :(得分:14)

转换为函数指针类型而不是int*

((int(__cdecl*)(int, char const*)) 0xC0DE)(1, "something")

请注意,这仍会调用未定义的行为,必须避免,除非您的实现明确记录了您可能会这样做并且您不关心可移植性。如果您想要安全,至少使用内联汇编,以便您可以依赖目标体系结构而不是编译器提供的保证。

答案 1 :(得分:4)

在C中,但不是C ++,您可以省略参数类型:

((int(*)()) 0xC0DE)(1, "something");