将指向函数的指针存储在void *中

杰杰

我了解您为何无法做到:

void(*fp)(void) = &function;
function_taking_void_pointer((void*)fp);

因为类型的长度可能不同。

但是添加另一个间接层有什么问题:

void(*fp)(void) = &function;
void(**fpp)(void) = &fp;
function_taking_void_pointer((void*)fpp)

我对此的背后思考:指向函数指针的指针应指向数据存储器,因此应与void *类型具有相同的长度。

那我怎么了?

用户名

没错,所有指针类型都是对象类型

N1570 6.3.5类型,第20段,第五个清单项目:

  • 指针类型可以从称为引用类型的函数类型或对象类型派生指针类型描述了一个对象,该对象的值提供对所引用类型的实体的引用。从引用类型T派生的指针类型有时被称为“ T指针”。从引用类型构造指针类型的过程称为“指针类型派生”。指针类型是完整的对象类型。

但是,指向对象类型的指针的大小不必等于void*(6.2.5 p28)。

  1. 指向void的指针应具有与字符类型的指针相同的表示和对齐要求。48)同样,指向兼容类型的合格或不合格版本的指针应具有相同的表示和对齐要求。所有指向结构类型的指针应具有相同的表示和对齐要求。指向联合类型的所有指针应具有相同的表示和对齐要求。指向其他类型的指针不必具有相同的表示或对齐要求。

但是,它们都可以转换void*(6.3.2.3 p1):

  1. 指向void的指针可以与任何对象类型的指针进行转换。指向任何对象类型的指针都可以转换为void指针并再次返回;结果应等于原始指针。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何存储指向Fsm中带有参数的函数的指针?

来自分类Dev

将指向参数包副本的指针存储在元组中

来自分类Dev

将值存储到指向结构的指针数组中

来自分类Dev

Cython:将指针传递给函数中的指针,采用 void **

来自分类Dev

为什么将具有不同参数类型的函数存储到带有void *参数UB的函数指针中?

来自分类Dev

在void *中存储指向T的指针,但是T可以是const或nonconst-使用void const *还是只使用void *?

来自分类Dev

指向C ++中函数的指针

来自分类Dev

将大对象存储在内存中还是在C#中仅存储指向它的指针?

来自分类Dev

检查C中void *指向的指针类型

来自分类Dev

如何将 void 指针传递给 C 中的函数?

来自分类Dev

指向C ++中的函数指针的指针

来自分类Dev

将SYSCALL函数存储在函数指针数组中

来自分类Dev

函数参数中的void指针

来自分类Dev

指向C中内置函数的函数指针

来自分类Dev

存储指向句子中单词的指针

来自分类Dev

指向存储在堆栈中的变量的指针

来自分类Dev

如何将函数指针存储在数组中?

来自分类Dev

在纯 C 中,我们可以使用指向 char 的指针而不是指向 void 的指针来实现泛型函数吗?

来自分类Dev

指向void函数的指针

来自分类Dev

我应该将整个对象还是指向对象的指针存储在容器中?

来自分类Dev

使用const指针指向函数中的类

来自分类Dev

指向函数中字符串的指针

来自分类Dev

Typedef指向C ++中C函数的指针

来自分类Dev

在C函数中传递指向数组的指针

来自分类Dev

指向函数中的结构数组的指针

来自分类Dev

从C ++中的函数返回指向数组的指针?

来自分类Dev

指向类变量中的函数的指针

来自分类Dev

您可以将“函数指针指向指针”转换为void *

来自分类Dev

将类型别名的变量传递到需要指向基础类型的指针的函数中

Related 相关文章

  1. 1

    如何存储指向Fsm中带有参数的函数的指针?

  2. 2

    将指向参数包副本的指针存储在元组中

  3. 3

    将值存储到指向结构的指针数组中

  4. 4

    Cython:将指针传递给函数中的指针,采用 void **

  5. 5

    为什么将具有不同参数类型的函数存储到带有void *参数UB的函数指针中?

  6. 6

    在void *中存储指向T的指针,但是T可以是const或nonconst-使用void const *还是只使用void *?

  7. 7

    指向C ++中函数的指针

  8. 8

    将大对象存储在内存中还是在C#中仅存储指向它的指针?

  9. 9

    检查C中void *指向的指针类型

  10. 10

    如何将 void 指针传递给 C 中的函数?

  11. 11

    指向C ++中的函数指针的指针

  12. 12

    将SYSCALL函数存储在函数指针数组中

  13. 13

    函数参数中的void指针

  14. 14

    指向C中内置函数的函数指针

  15. 15

    存储指向句子中单词的指针

  16. 16

    指向存储在堆栈中的变量的指针

  17. 17

    如何将函数指针存储在数组中?

  18. 18

    在纯 C 中,我们可以使用指向 char 的指针而不是指向 void 的指针来实现泛型函数吗?

  19. 19

    指向void函数的指针

  20. 20

    我应该将整个对象还是指向对象的指针存储在容器中?

  21. 21

    使用const指针指向函数中的类

  22. 22

    指向函数中字符串的指针

  23. 23

    Typedef指向C ++中C函数的指针

  24. 24

    在C函数中传递指向数组的指针

  25. 25

    指向函数中的结构数组的指针

  26. 26

    从C ++中的函数返回指向数组的指针?

  27. 27

    指向类变量中的函数的指针

  28. 28

    您可以将“函数指针指向指针”转换为void *

  29. 29

    将类型别名的变量传递到需要指向基础类型的指针的函数中

热门标签

归档