如何在c中转换void函数指针?

时间:2011-07-29 12:35:58

标签: c function pointers casting void

#include <stdio.h>

int f() {
  return 20;
}

int main() {
    void (*blah)() = f;

    printf("%d\n",*((int *)blah())());     // error is here ! Need help !
    return 0;
}

我想将'blah'强制转换回(int *),以便我可以将它用作函数在printf语句中返回20。似乎没有用。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:3)

这个怎么样?

printf("%d\n",((int (*)())blah)() ); 

答案 1 :(得分:3)

您的代码似乎正在调用blah指向的函数,然后尝试将其void返回值转换为int *,这当然无法完成

您需要在调用函数之前强制转换函数指针。在单独的声明中这样做可能更清楚,但您可以在printf调用中按照您的要求执行此操作:

printf( "%d\n" , ((int (*)())blah)() );

答案 2 :(得分:1)

不是初始化一个void指针并稍后重新编译,而是立即将它初始化为一个int指针(因为你已经知道它是一个int函数):

int (*blah)() = &f; // I believe the ampersand is optional here

要在代码中使用它,您只需将其称为:

printf("%d\n", (*blah)());

答案 3 :(得分:0)

typedef int版本:

typedef int (*foo)();

void (*blah)() = f;
foo qqq = (foo)(f);

编辑:oops忘了给出打印声明

printf("%d\n", qqq());