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

发布于 2024-11-27 02:56:47 字数 308 浏览 2 评论 0原文

考虑一下:

#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 的函数,但它似乎不起作用。我该如何修复它?

Consider:

#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;
}

I want to cast 'blah' back to (int *) so that I can use it as a function to return 20 in the printf statement, but it doesn't seem to work. How can I fix it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

再可℃爱ぅ一点好了 2024-12-04 02:56:47

这可能会修复它:

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

This might fix it:

printf("%d\n", ((int (*)())blah)() ); 
云朵有点甜 2024-12-04 02:56:47

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

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

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

Your code appears to be invoking the function pointed to by blah, and then attempting to cast its void return value to int *, which of course can't be done.

You need to cast the function pointer before invoking the function. It is probably clearer to do this in a separate statement, but you can do it within the printf call as you've requested:

printf("%d\n", ((int (*)())blah)() );
春风十里 2024-12-04 02:56:47

不要初始化 void 指针并稍后重新转换,而是立即将其初始化为 int 指针(因为您已经知道它是 int 函数):

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

要在代码中使用它,您只需像这样调用它:

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

Instead of initializing a void pointer and recasting later on, initialize it as an int pointer right away (since you already know it's an int function):

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

To use it in your code, you simply call it like so:

printf("%d\n", (*blah)());
电影里的梦 2024-12-04 02:56:47

typedef int 版本:

typedef int (*foo)();

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

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

typedef the int version:

typedef int (*foo)();

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

printf("%d\n", qqq());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文