【发布时间】:2010-12-03 08:54:50
【问题描述】:
我知道具有已知签名的特定函数位于已知地址。如何在 C++ 中初始化函数指针?
我尝试了以下(及其许多变体)但无济于事:
int (*FunctionName)(int arg1, long arg2, char *arg3) = (int (*FunctionName)(int arg1, long arg2, char *arg3))0xCAKE;
我感觉是右边的表达式造成了麻烦,因为如果代码初始化为0x0/NULL,代码就会编译。任何指针? (双关语)。
【问题讨论】:
-
你试过从空指针开始,然后加上0xCAKE/sizeof(functionpointer)吗?
-
呃,没关系,按 CashCow 说的做
-
你不应该太确定函数指针实际上只是一个地址。它们可以是结构,也可以是指向结构的指针,编译器实际上会在其中发出一个小子例程来加载跳转目标并转到那里。指向类成员的指针就是一个例子:codeproject.com/KB/cpp/FastDelegate.aspx。 PowerPC 函数描述符是另一个。
-
在我所有的挫败感以及类型的混合和匹配中,我粘贴了显然是非功能性的代码。我接受了@CashCow 的回答,因为它确实为我阐明了这个概念(以及代码)并且适合我的小头脑。 @Crashworks:这很有趣。或许从现在开始,我不应该这么急于做出假设!
标签: c++ pointers initialization