一个函数返回类型的问题,请帮忙

vindo 2010-04-20 02:16:01
看这样一个小程序

#include <stdio.h>
#include <stdlib.h>

typedef struct test_t
{
int count;
int (*funhook)(struct test_t*);
}test_t;

test_t *mytmp;

int fun(test_t *mytmp)
{
printf("fun::count=%d\n",mytmp->count);
return mytmp->funhook(mytmp);
}

int fun2(test_t *mytmp)
{
printf("fun2::count=%d\n",++(mytmp->count));
return;
}
int main(int argc,char **argv)
{
mytmp = (test_t*)malloc(sizeof(test_t));
mytmp->count = 1;
mytmp->funhook = fun2;
fun(mytmp);
printf("main::%d\n",mytmp->count);
free(mytmp);
return 0;
}

这个程序编译没有错,我想问的是15行fun函数返回到了另一个函数fun2,这样子的话fun函数的返回类型应该怎样定义呢?
fun函数返回到另一个函数这样的用法,请帮忙给讲解一下
...全文
78 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
vindo 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 huanmie_09 的回复:]
全局结构体:
mytmp = (test_t*)malloc(sizeof(test_t));
mytmp->count = 1;
mytmp->funhook = fun2; /*这里指向函数fun2的入口地址*/

主函数中调用:
fun(mytmp);
转入到fun入口地址执行,
打印出fun::count=1,
然后返回 mytmp->funhook(mytmp);的执行……
[/Quote]

谢谢,很详细~!!
vindo 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 creepingdeath 的回复:]
return mytmp->funhook(mytmp);

等价于

int nReturnValue = mytmp->funhook(mytmp);
return nReturnValue;

如果funhook的返回类型是int的话。
[/Quote]
很有道理,非常感谢!!
huanmie_09 2010-04-20
  • 打赏
  • 举报
回复
全局结构体:
mytmp = (test_t*)malloc(sizeof(test_t));
mytmp->count = 1;
mytmp->funhook = fun2; /*这里指向函数fun2的入口地址*/

主函数中调用:
fun(mytmp);
转入到fun入口地址执行,
打印出fun::count=1,
然后返回 mytmp->funhook(mytmp);的执行结果.
在返回之前需要得到函数指针所指向函数的返回值.
因此先执行fun2,打印fun2::count=2;
fun2的返回值return;应该要返回一个值,如return 0;否则,vs2008下编译会出错.
fun2执行完后,返回0, mytmp->funhook(mytmp);的执行结果为0,fun返回0.
回到主函数,继续执行,这时, mytmp->count=2


CreepingDeath 2010-04-20
  • 打赏
  • 举报
回复
return mytmp->funhook(mytmp);

等价于

int nReturnValue = mytmp->funhook(mytmp);
return nReturnValue;

如果funhook的返回类型是int的话。
r11222 2010-04-20
  • 打赏
  • 举报
回复
fun

fun2



这样不行吗。。。。。
pengzhixi 2010-04-20
  • 打赏
  • 举报
回复
那你在fun里面调用fun2不就是了,用一个局部变量保存下fun2返回的值

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧