回 帖 发 新 帖 刷新版面

主题:关于void指针的问题

struct combine
{
......
int (*iscomplete)(void *p,int k);
};
......
int iscomplete(combine *p,int k){...}
p->iscomplete=iscomplete;

编译时此处出错,显示类型不匹配,void不是可以接受所有类型的指针吗为什么会出错呢?

回复列表 (共3个回复)

沙发

说的是两个iscomplete指针不是一种类型的

板凳

函数指针的赋值,一定要参数列表完全一样才可以。

3 楼

#include<stdio.h>
struct abc
 {int (*step)(abc a,int b);
  char *chr;
 }a_ok;
void main()
{int step_ok(abc a,int b);
abc *ok;
int (*step_lnk)(abc a,int b);
ok->step=step_ok;
a_ok.step=step_ok;
step_lnk=step_ok;
a_ok.chr="abcdef......";
ok->step(a_ok,123);   /*但a_ok.(*step)(a_ok,123);这样编译会错误,用的borlandc3.1,谭浩强的C语言程序设计中说调用函数要(*step)(a_ok,123),怎么在结构中不成立,下面在main()中这样调用就行,step(a_ok,123)也行,为什么啊?*/
a_ok.step(a_ok,123);
step_lnk(a_ok,123);
(*step_lnk)(a_ok,123);
}
int step_ok(abc a,int b)
{printf("%s\n",a.chr);
printf("b=%d\n",b);
return 0;}
用borlandc3.1编译通过,运行正常,但上面问题怎么解释?struct abc
 {int (*step)(abc a,int b);    我还以为会出错,哪来的abc,怎么成功编译了?
  char *chr;
 }a_ok;

我来回复

您尚未登录,请登录后再回复。点此登录或注册