【发布时间】:2011-07-29 12:35:58
【问题描述】:
考虑:
#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,但它似乎不起作用。我该如何解决?
【问题讨论】:
-
您使用与函数签名不匹配的函数指针是否有原因?
-
真是个黑客。没有原型的函数,然后将返回
void的函数指针重新解释为返回int的函数指针。我认为没有任何借口可以做这样的事情。 -
是的,我可以让'blah'指向我想要的任何东西,从而节省变量:)
-
@Jens:其实有一个很好的借口;对于函数指针类型,这是实现
void *等效项的唯一方法。可能会使用另一个变量来保存确定所指向函数的实际类型的信息,以便正确调用它。 -
或者,如果
void (*)()函数指针只是您传递给 API 的“上下文”的一部分,该 API 会被传递回回调函数,那么您可能静态地知道要转换到的类型调用它。
标签: c function pointers casting void