#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。似乎没有用。有人可以帮忙吗?
答案 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());