主题:关于void指针的问题
nevermorenec
[专家分:0] 发布于 2011-01-17 14:14:00
struct combine
{
......
int (*iscomplete)(void *p,int k);
};
......
int iscomplete(combine *p,int k){...}
p->iscomplete=iscomplete;
编译时此处出错,显示类型不匹配,void不是可以接受所有类型的指针吗为什么会出错呢?
回复列表 (共3个回复)
沙发
yxqyrh [专家分:1070] 发布于 2011-01-17 15:56:00
说的是两个iscomplete指针不是一种类型的
板凳
eastcowboy [专家分:25370] 发布于 2011-01-18 21:53:00
函数指针的赋值,一定要参数列表完全一样才可以。
3 楼
LoveCsys [专家分:0] 发布于 2011-01-20 21:55:00
#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;
我来回复