1
void f(void);
void (*pf)(void) = f;
void *p = &pf;
(*(void (**)(void))p)();
我试图在C标准(草案)文档中找到有关这种转换的部分。但在过去的30分钟内我没有这样做。是一个指向可转换为void指针的函数指针的指针,反之亦然?
void指针和指向函数指针的指针之间的转换是如何定义的?
void f(void);
void (*pf)(void) = f;
void *p = &pf;
(*(void (**)(void))p)();
我试图在C标准(草案)文档中找到有关这种转换的部分。但在过去的30分钟内我没有这样做。是一个指向可转换为void指针的函数指针的指针,反之亦然?
void指针和指向函数指针的指针之间的转换是如何定义的?
§6.3.2.3/ P1:
一个指向
void
可转化为或者从一个指针到任何 对象类型。
§6.2.5/ P20:
甲指针类型可以从函数类型或对象 类型中导出,称为引用的类型。 [...]指针类型是完整对象类型的 。
“函数指针”是一个对象类型,所以“指针函数指针”是指向对象类型等可转换为和从“指针void
”由§6.3.2.3/ P1。