void f(void);
void (*pf)(void) = f;
void *p = &pf;
(*(void (**)(void))p)();
我试图在C标准(草案)文档中找到有关此类转换的部分。但是在过去的30分钟里我没有这样做。
如何定义void指针和指向函数指针的指针之间的转换?
答案 0 :(得分:4)
§6.3.2.3/ P1:
指向
void
的指针可以转换为指向任何指针的指针 对象类型。
§6.2.5/ P20:
指针类型可以从函数类型或对象派生 type,称为引用类型。 [...]指针类型是 完整的对象类型。
“指向函数的指针”是一种对象类型,因此“指向函数指针的指针”是指向对象类型的指针,因此可以通过§6.3.2.3转换为“指向void
的指针” / P1。