什么是void(*)()类型以及如何转换为这样的类型

时间:2015-03-02 12:01:59

标签: c++ pointers

c ++中void (*)()类型是什么,如何将int转换为此类型,我在这样的函数中找到它:

function(const char*, long int, void (*)());

2 个答案:

答案 0 :(得分:3)

它是一个函数指针:没有参数或返回值的函数的地址。

您无法将int有意义地投射到此类型。它用于将指针传递给您自己的代码以便调用函数:

void my_callback() {/* do something */}

function("Hello", 42, my_callback);

现在该函数可以将其参数调用为函数,具有调用"回调"的效果。功能

答案 1 :(得分:1)

在C / C ++中,“最大咀嚼”规则适用于评估表达式:从起点开始,尽可能多地离开以获得有效的表达式,然后右转。

这是a --- b如何转换为(a - ) - b而不是 - ( - b)

回到你的表达

void (*)()
  • (*) - >你有一个指针
  • (*)() - >你有一个函数指针,什么不带参数
  • void (*)() - >你有一个函数的指针什么不需要 参数并且不返回值

所以,你的函数是在没有参数的函数的指针中传递的,它不返回任何内容。传入指针时要小心,因为它需要完全匹配(返回类型和所有)。

现在,就你为什么要这样做而言,我可以给你一个实际的例子:pthred_create函数原型:

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                          void *(*start_routine) (void *), void *arg);

void * start_routine()是胎面将运行的(就像它的主要部分),这就是创建函数需要此函数指针的原因。 一些API使用此方法以获得更大的灵活性