我知道具有已知签名的特定功能位于已知地址。如何在C ++中初始化函数指针?
我尝试了以下(及其许多变体)无济于事:
int (*FunctionName)(int arg1, long arg2, char *arg3) = (int (*FunctionName)(int arg1, long arg2, char *arg3))0xCAKE;
我感觉右边的表达式会导致麻烦,因为如果代码初始化为0x0
/ NULL
,代码就会编译。有什么指针吗? (双关语)。
答案 0 :(得分:5)
除了CAKE不是正确的十六进制值这一事实,因为K不是一个有效的十六进制字符,加上有关不同指针类型的任何问题,你的主要错误是FunctionName是一个不是类型的变量。
就像在做
px = (px)0xBADFACE
;
其中px是常规指针
如果你删除右边的FunctionName,剩下的就可以了,但是更容易成为一个typedef。
typedef int( *FuncType)(int arg1, long arg2, char * arg3 );
FuncType FunctionName = (FuncType)(0xCAFE);
答案 1 :(得分:2)
int (*FunctionName)(int arg1, long arg2, char *arg3) = (int ( * )(int arg1, long arg2, char *arg3))0x01;
适用于VS2008。 FunctionName是变量的名称,而不是类型的一部分。