有人可以解释这是什么意思吗?无效(*func)();

标签 c callback function-pointers void-pointers

我有一个结构体,其中有一个元素表示为 void (*func)(); 我知道 void 指针通常用于函数指针,但我似乎无法定义该函数。我不断收到取消引用指向不完整类型的指针。我用谷歌搜索了一下但没有结果。任何建议将不胜感激。

我正在尝试这样做:

struct callback * cb;
cb->func = *readUserInput;

ReadUserInput 定义为:

void readUserInput(void)
{
}

回调定义如下:

struct callback {
    void (*func)();
    int pcount;
    enum attr_type type;
    void *p[0];
 };

最佳答案

您需要获取函数的地址,而不是尝试取消引用它。

改变

cb->func = *readUserInput;

cb->func = &readUserInput;

此外,您正在创建一个具有垃圾值的指针,然后取消引用它,从而导致未定义的行为。您需要以一种或另一种方式为其分配空间(malloc/free 或只是在堆栈上分配它):

struct callback cb; // put it on the stack
cb.func = &readUserInput;

struct callback * cb = malloc(sizeof(callback));
cb->func = &readUserInput;

...

free(cb);

关于有人可以解释这是什么意思吗?无效(*func)();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8352174/

相关文章:

java - 将位图从 Java 类返回到 Activity

C ADT函数指针作为参数?

C 没那么难 : void ( *( *f[] ) () ) ()

c - 访问静态成员

c - 字符串/段错误

javascript - 如何在分页事件中突出显示数据表中的单词

javascript - jQuery 提交回调不起作用

c - 不需要在结构中的函数指针声明中指定参数的 C99 是否正确?

c - 我必须下载哪个库才能在 C 中获取 itoa()

arrays - 从数组中删除一个数字