【发布时间】:2015-06-09 01:05:26
【问题描述】:
void f(void);
void (*pf)(void) = f;
void *p = &pf;
(*(void (**)(void))p)();
我试图在 C 标准(草案)文档中找到说明这种转换的部分。但我在最后 30 分钟内没有这样做。
void指针和指向函数指针的指针之间的转换是如何定义的?
【问题讨论】:
标签: c pointers function-pointers
void f(void);
void (*pf)(void) = f;
void *p = &pf;
(*(void (**)(void))p)();
我试图在 C 标准(草案)文档中找到说明这种转换的部分。但我在最后 30 分钟内没有这样做。
void指针和指向函数指针的指针之间的转换是如何定义的?
【问题讨论】:
标签: c pointers function-pointers
§6.3.2.3/p1:
指向
void的指针可以转换为指向任何 对象类型。
§6.2.5/p20:
指针类型可以派生自函数类型或对象 类型,称为引用类型。 [...] 指针类型是 完整的对象类型。
“指向函数的指针”是一个对象类型,因此“指向函数的指针”是一个指向对象类型的指针,因此可以通过 §6.3.2.3/p1 与“指向void的指针”相互转换.
【讨论】: