【发布时间】:2020-09-10 15:39:35
【问题描述】:
我在下面用 C 语言编写了代码,但在 p = getNext; 上收到警告
从 'int (int *)' 分配给 'void (*)(void *)' 的不兼容指针类型
int getNext(int *p){
return rand();
}
void testFunc(void (* p)(void *)){
printf("right!\n");
}
int main(int argc, char const *argv[])
{
void (*p)(void *);
p = getNext;
testFunc(p);
return 0;
}
我试图解决它
p = (void *)getNext;
它有效。但我不知道为什么它会起作用。 (void *) 是否将getNext 转换为可以返回未定义类型数据的新函数?
谁能解释一下?
【问题讨论】:
-
想一想你想要做什么。为什么你认为你收到错误信息?是什么让您认为
p和getNext的不同类型可以一起工作?并且该演员将导致您的代码具有未定义的行为。 -
函数指针定义的语法是
<return_type> (*<pointer_name>) (function_arguments);。返回类型和函数参数不适合您的函数getNext!