考虑:
#include <stdio.h>
int f() {
return 20;
}
int main() {
void (*blah)() = f;
printf("%d\n",*((int *)blah())()); // Error is here! I need help!
return 0;
}
我想将'blah'强制转换回(int *),以便我可以将其用作在printf
语句中返回20的函数,但它似乎不起作用。我该如何解决?
怎么样?
printf("%d\n",((int (*)())blah)() );
您的代码似乎正在执行的操作是调用blah
指向的函数,然后尝试将其void
返回值强制转换为int *
,这当然是不可以的。
您需要在调用函数之前强制转换函数指针。在单独的语句中执行此操作可能更清晰,但是您可以根据需要在printf调用中执行此操作:
printf( "%d\n" , ((int (*)())blah)() );
而不是初始化一个void指针并在以后重铸,请立即将它初始化为一个int指针(因为您已经知道它是一个int函数):
int (*blah)() = &f; // I believe the ampersand is optional here
要在代码中使用它,您只需像这样调用它:
printf("%d\n", (*blah)());
typedef
int版本:
typedef int (*foo)();
void (*blah)() = f;
foo qqq = (foo)(f);
编辑:哎呀,忘记提供打印说明了>>
printf("%d\n", qqq());