指向函数指针的指针是否可转换为void指针,反之亦然?

时间:2015-06-09 01:05:27

标签: c pointers function-pointers

void f(void);
void (*pf)(void) = f;
void *p = &pf;
(*(void (**)(void))p)();

我试图在C标准(草案)文档中找到有关此类转换的部分。但是在过去的30分钟里我没有这样做。

如何定义void指针和指向函数指针的指针之间的转换?

1 个答案:

答案 0 :(得分:4)

§6.3.2.3/ P1:

  

指向void的指针可以转换为指向任何指针的指针   对象类型。

§6.2.5/ P20:

  

指针类型可以从函数类型或对象派生   type,称为引用类型。 [...]指针类型是   完整的对象类型。

“指向函数的指针”是一种对象类型,因此“指向函数指针的指针”是指向对象类型的指针,因此可以通过§6.3.2.3转换为“指向void的指针” / P1。