gpt4 book ai didi

c - 将函数分配给函数指针

转载 作者:太空宇宙 更新时间:2023-11-04 07:06:30 26 4
gpt4 key购买 nike

我写了一个测试程序来理解回调函数和函数指针。程序如下。

我的问题是在分配时

cb_display = (void*)display_struct;

我必须将函数转换为 void*。为什么即使函数的返回类型为 void 也需要这样做?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
int a;
char b[16];
}myst_t;

void (*cb_display)(void*);

void display_struct(myst_t *st){
fprintf(stdout, "a -> %d b -> %s \n",st->a,st->b);
}

int main()
{
myst_t myst;
myst.a = 789432;
strncpy(myst.b,"helloabcd",9);

cb_display = (void*)display_struct;

cb_display(&myst);

return 0;
}

最佳答案

cb_display = (void*)display_struct;

实际上在 C 中也是无效的。不要这样做。您不能将 void * 分配给函数指针。

要解决您的问题,请将您的函数指针声明为:

void (*cb_display)();

这意味着它匹配一个没有返回值且接受未指定数量参数的函数。然后你不需要任何 Actor 。另请注意,正如 Olaf 在评论中指出的那样,带有 () 且有效的函数声明符是过时的 C 功能。

当然,如果您只传递带有myst_t * 参数的display_struct 等函数,您也可以将cb_display 声明为: void (*cb_display)(myst_t *);

关于c - 将函数分配给函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32573922/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com