我有一个结构体,其中有一个元素表示为 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/