C编程:void *参数是否真的是指向任何东西的指针,我可以在那里传递函数指针吗

MichałZiobro

我考虑应该如何void *正确使用(我与C语言有所不同)。我记得void *用来启用将任何参数传递给回调函数的功能。我知道可以将类似原始类型int *,constchar *甚至值集合的值作为传递struct attributes *

我考虑将指针传递给函数void *是否可以。

例如

typedef void (*callback_t)(void *);
typedef void (*my_custom_callback_t)( /* list of params */ )

void someAPIFunction( /*... */, callback_t callback, void *callback_param);

void standard_callback(void *param) { 

       ((my_custom_callback_t) param) ( /* my params */ );
}

我考虑是否具有此类类型,将my_custom_callback作为参数传递给standard_callback是否正确?

void my_custom_callback(/* list of params */) { }

someAPIFunction( /*...*/, standard_callback, my_custom_callback); 
用户名

不,您不能将函数指针作为传递void *

6.3.2.3指针

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

  1. 可以将指向一种类型的函数的指针转换为指向另一种类型的函数的指针,然后再次返回。结果应等于原始指针。如果使用转换后的指针来调用其类型与引用的类型不兼容的函数,则该行为是不确定的。

注意,没有提到混合对象和函数指针的可能性。它似乎可以在某些系统上运行,但是它是未定义的行为,因此不能保证能正常工作。

但是,您可以创建包装对象并传递其地址:

struct wrapper {
    my_custom_callback_t func;
};

struct wrapper my_wrapper = { my_custom_callback };
someAPIFunction( /*...*/, standard_callback, &my_wrapper); 

或者只是将指针传递给函数指针(函数指针变量是对象类型):

my_custom_callback_t func = my_custom_callback;
someAPIFunction( /*...*/, standard_callback, &func); 

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用指针参数在c中传递函数指针

来自分类Dev

指向void *函数的指针C ++

来自分类Dev

C ++传递函数指针

来自分类Dev

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

来自分类Dev

函数指针C编程

来自分类Dev

在C中传递函数还是传递函数指针?

来自分类Dev

在C#中传递函数指针

来自分类Dev

以void指针作为参数传递函数会发出警告

来自分类Dev

C语言上的lint:函数的参数(指针)可以是const。*但是*我正在写传递的指针

来自分类Dev

指向void函数的指针

来自分类Dev

C++ 是否可以实现指向不同参数列表的函数指针?

来自分类Dev

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

来自分类Dev

我们可以在C语言中将(void *)0称为void指针吗?

来自分类Dev

在 C 中出错:从不兼容的指针类型传递函数的参数 1

来自分类Dev

基本指针C编程

来自分类Dev

C ++如何获取指向lambda函数的void指针?

来自分类Dev

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

来自分类Dev

C语言编程。指向结构的指针

来自分类Dev

函数需要参数并返回指向void函数的指针

来自分类Dev

从Cython传递指向C函数的原始指针

来自分类Dev

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

来自分类Dev

您可以从C中当前指向的函数中更改指向函数的指针吗?

来自分类Dev

C++ 可以将空指针传递给函数吗?

来自分类Dev

我可以在导出到c的c ++函数中使用`bool`类型或不透明的指针指向类吗?

来自分类Dev

doxygen C指向函数参数文档的指针

来自分类Dev

指向函数的C ++指针作为参数

来自分类Dev

C与C ++,void **指针的处理

来自分类Dev

#include“ another_source.c”,在那里使用内联函数(),然后该函数()也变为内联吗?

来自分类Dev

C将void指针数组传递给函数

Related 相关文章

  1. 1

    使用指针参数在c中传递函数指针

  2. 2

    指向void *函数的指针C ++

  3. 3

    C ++传递函数指针

  4. 4

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

  5. 5

    函数指针C编程

  6. 6

    在C中传递函数还是传递函数指针?

  7. 7

    在C#中传递函数指针

  8. 8

    以void指针作为参数传递函数会发出警告

  9. 9

    C语言上的lint:函数的参数(指针)可以是const。*但是*我正在写传递的指针

  10. 10

    指向void函数的指针

  11. 11

    C++ 是否可以实现指向不同参数列表的函数指针?

  12. 12

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

  13. 13

    我们可以在C语言中将(void *)0称为void指针吗?

  14. 14

    在 C 中出错:从不兼容的指针类型传递函数的参数 1

  15. 15

    基本指针C编程

  16. 16

    C ++如何获取指向lambda函数的void指针?

  17. 17

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

  18. 18

    C语言编程。指向结构的指针

  19. 19

    函数需要参数并返回指向void函数的指针

  20. 20

    从Cython传递指向C函数的原始指针

  21. 21

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

  22. 22

    您可以从C中当前指向的函数中更改指向函数的指针吗?

  23. 23

    C++ 可以将空指针传递给函数吗?

  24. 24

    我可以在导出到c的c ++函数中使用`bool`类型或不透明的指针指向类吗?

  25. 25

    doxygen C指向函数参数文档的指针

  26. 26

    指向函数的C ++指针作为参数

  27. 27

    C与C ++,void **指针的处理

  28. 28

    #include“ another_source.c”,在那里使用内联函数(),然后该函数()也变为内联吗?

  29. 29

    C将void指针数组传递给函数

热门标签

归档