我问的问题不会用于生产,这纯粹是好奇,
假设我有一个函数,它的原型是:
int myFunc(int, char*);假设我知道静态内存地址(例如,0xC0DE),我可以这样做:
int (__cdecl* myFuncPtr)(int, char*) = (int(__cdecl*)(int, char*)) 0xC0DE;
myFuncPtr(1, "something");现在,我是否可以在一行中调用该函数,而不需要定义它?如下所示:
((int(__cdecl*)) 0xC0DE)(1, "something");发布于 2014-07-03 21:33:13
转换为函数指针类型而不是int*类型
((int(__cdecl*)(int, char const*)) 0xC0DE)(1, "something")请注意,这仍然会调用未定义的行为,并且必须避免,除非您的实现显式地记录了您可能这样做,并且您不关心可移植性。如果您希望安全,请至少使用内联程序集,以便您可以依赖目标体系结构而不是编译器所做的保证。
发布于 2014-07-03 21:50:15
在C (但不是C++ )中,可以省略参数类型:
((int(*)()) 0xC0DE)(1, "something");https://stackoverflow.com/questions/24563590
复制相似问题