强制转换函数指针

Dig*_*Gal 2 c++

假设我有一个功能

void myFun(int*) 
Run Code Online (Sandbox Code Playgroud) 在C++中,以下是什么意思


  ( void(*)(void*) )&myFun

Run Code Online (Sandbox Code Playgroud)

它是一个指向函数的指针,它接受一个(void*)参数并返回一个void?允许这种类型的演员吗?

Jer*_*fin 5

就目前而言,我很确定这是不允许的.

如果你删除初始周围的parens void得到:

void (*)(void *)
Run Code Online (Sandbox Code Playgroud)

...然后是的,它是一个指向函数的指针,该函数返回void并将指向void的指针作为唯一的参数.要转换为该类型,您需要在括号中包含该类型的整个名称,因此您将得到:(void (*)(void *)),您将按照所投射的值来执行:获取:

(void (*)(void *))&myFun;
Run Code Online (Sandbox Code Playgroud)

至少如果内存服务,是的,这是允许的,虽然通过结果取消引用指针(即,试图调用它指向的函数)可能会给出未定义的行为.特别是,当/如果你调用函数时,它期望一个指向int的指针,并且(可能)将它指向的任何东西用作int.但是,如果它指出的内容没有正确对齐以用作int,则它不太可能按预期工作.