【问题标题】:Is a pointer to function pointer convertible to a void pointer and vice versa?指向函数指针的指针是否可以转换为 void 指针,反之亦然?
【发布时间】: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


    【解决方案1】:

    §6.3.2.3/p1:

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

    §6.2.5/p20:

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

    “指向函数的指针”是一个对象类型,因此“指向函数的指针”是一个指向对象类型的指针,因此可以通过 §6.3.2.3/p1 与“指向void的指针”相互转换.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 2021-07-22
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      相关资源
      最近更新 更多