打印

请用ADS的朋友帮忙看看,这个编译错误如何消除

[复制链接]
1514|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lhzw2001|  楼主 | 2008-4-23 16:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
int test(void);
void tt1(void);
////////////////////////////////////// 
int test(void)
{
int i;
for (i=0;i<100;i++) ; //测试,随便写个
return 1;
}
//===================================
void tt1(void)
{
int i;
for (i=0;i<100;i++) ;
}
//===================================
 void kk(int (*function)())
{
    (*function)();// 测试
}

//===================================
int main(void)
{
while(1)
 {
   kk(test);
  
   kk((int)tt1);     //  这里报错了!!!!!!!!??????
 }
}
//===================================

相关帖子

沙发
dld2| | 2008-4-23 16:57 | 只看该作者

说得很清楚,类型不匹配

对函数指针变量来说,类型包括参数和返回值。

使用特权

评论回复
板凳
lhzw2001|  楼主 | 2008-4-23 17:04 | 只看该作者

我强制转换 (int) 不起作用吗?

使用特权

评论回复
地板
lhzw2001|  楼主 | 2008-4-23 17:17 | 只看该作者

小弟眼拙,恳请指正

使用特权

评论回复
5
LPcfANS| | 2008-4-23 18:13 | 只看该作者

指针...括号...

使用特权

评论回复
6
HWM| | 2008-4-23 18:21 | 只看该作者

LZ:给你一个范例,但还是别这样玩,费神!

int test( void )
{
    return 0;
}

void test1( void )
{
}

void t_fun( int func(void)  )
{
}

int main ( void )
{
    t_fun( test );
    t_fun( (int(*)(void))test1 );
}

使用特权

评论回复
7
cheng1236| | 2008-4-23 20:05 | 只看该作者

回复

不匹配啊

使用特权

评论回复
8
lhzw2001|  楼主 | 2008-4-23 21:07 | 只看该作者

谢谢7楼的HWM的正解!


这样玩确实费神 , 我原以为强制转换一下就行,没想到这个强制转换竟这么大牌,呵!

但还是有些看不懂!还请HWM兄多多讲解!我以下分解可对?

 t_fun( (int(*)(void))test1 );

(int(*)(void))分解如下:
                       int(*)(void)   转成int指针类型方匹配
                          (*)(void)   转成指针类型
                             (void)   函数原类型

感觉又不对,void test1(); 函数定义前的void指的是返回类型为空,而欲传递的值应该是函数的地址吧,这两者有关系吗?实在不解!

我想实现的功能就是,所传递的函数类型各不一样,有的是int有的是void

是否有其它方法呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

337

帖子

0

粉丝