结果是多少

lunarfan 2008-11-25 03:46:20

#include<stdio.h>

  int inc(int a)

  {

  return(++a);

  }

  int multi(int*a,int*b,int*c)

  {

  return(*c=*a**b);

  }

  typedef int(FUNC1)(int in);

  typedef int(FUNC2) (int*,int*,int*);

  void show(FUNC2 fun,int arg1, int*arg2)

  {

  INCp=&inc;

  int temp =p(arg1);

  fun(&temp,&arg1, arg2);

  printf("%d\n",*arg2);

  }

  main()

  {

  int a;

  show(multi,10,&a);

  return 0;

  }


...全文
219 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
wys871105 2008-11-26
  • 打赏
  • 举报
回复
看了后想了想
typedef int(FUNC1)(int in);
typedef int(FUNC2) (int*,int*,int*);
其实是 typedef int (FUNC1)(int in);
typedef int (FUNC2)(int*,int*,int*);
即(FUNC1)(int in),(FUNC2)(int*,int*,int*)是int型的别名了,
是不是啊?
坐看昀起 2008-11-26
  • 打赏
  • 举报
回复
------ 已启动生成: 项目: CSDN论坛, 配置: Debug Win32 ------
正在编译...
xiangmu.c
d:\c语言程序\csdn论坛\csdn论坛\xiangmu.c(244) : error C2065: “INCp”: 未声明的标识符
d:\c语言程序\csdn论坛\csdn论坛\xiangmu.c(244) : warning C4047: “=”: “int”与“int (__cdecl *)(int)”的间接级别不同
d:\c语言程序\csdn论坛\csdn论坛\xiangmu.c(245) : error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
d:\c语言程序\csdn论坛\csdn论坛\xiangmu.c(246) : error C2065: “temp”: 未声明的标识符
czbever 2008-11-26
  • 打赏
  • 举报
回复
编译都不过不去 lz可能copy错了吧
wendymax 2008-11-26
  • 打赏
  • 举报
回复
FINC1 p = &inc;
结果110
就呆在云上 2008-11-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lbh2001 的回复:]
引用 1 楼 lunarfan 的回复:
INCp=&inc;
这句我看不懂什么意思?

写错了
应该是

C/C++ codeFINC1 p = &inc;
[/Quote]

从头到尾就是一些,函数的定义和和使用
你把typedef定义的东西当作对象来用就是了
只是这个对象可以调用而已
liubuweiright 2008-11-25
  • 打赏
  • 举报
回复
JF
3Q
liangkaiyu 2008-11-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 IT_HAWK 的回复:]
110
[/Quote]
liyudefly 2008-11-25
  • 打赏
  • 举报
回复

#include<stdio.h>//
int inc(int a)//
{ //
return(++a);//
}
int multi(int*a,int*b,int*c)
{
return(*c=*a**b);
}
typedef int(FUNC1)(int in); //第一个int是这个函数指针所指向的函数的返回值,里面是这个函数的参数
typedef int(FUNC2) (int*,int*,int*);
void show(FUNC2 fun,int arg1, int*arg2)
{
INCp=&inc; //这里错了,应该是FUNC1 *p=inc;或者FUNC1 *p=&inc;从后面的inc可知这里是一个函数指针,而且这个函数指针的参数是要和inc()函数相同,故应该是FUNC1.

int temp =p(arg1);
fun(&temp,&arg1, arg2);
printf("%d\n",*arg2);
}
int main()
{
int a;
show(multi,10,&a);
return 0;
}


从show()开始调用,arg1 = 10, arg2 = &a,temp = p(arg1)就是temp = inc(arg1),也就是temp = inc(10),temp =11,fun(&temp,&arg1,arg2),这里的fun是FUNC2类型的,也就是他是指向的是一个返回值为int,参数为(int *,int *,int *)的函数,在主函数里调用时, 执行show(multi,10,&a)时已经让fun指向了munti函数,也就是就,fun(&temp,&arg1,arg2)就是multi(&temp,&arg1,arg2),这样*arg2 = *temp * *arg1,*arg2 = 11 * 10 = 110了,值得注意的是,这个*arg2里存的地址就是主函数里a的地址,最终能把值传回,不知这样说清楚了不?
toadzw 2008-11-25
  • 打赏
  • 举报
回复
up
wudeshou82666 2008-11-25
  • 打赏
  • 举报
回复
typedef int(FUNC1)(int in);
typedef int(FUNC2) (int*,int*,int*);
这样申明的是啥呢
我没有看到过。。。。
wudeshou82666 2008-11-25
  • 打赏
  • 举报
回复
UP
wys871105 2008-11-25
  • 打赏
  • 举报
回复
typedef int(FUNC1)(int in);

  typedef int(FUNC2) (int*,int*,int*);
是怎么定义的啊?
尤其是int(FUNC1)
先谢了啊?
chenboxun 2008-11-25
  • 打赏
  • 举报
回复
110
vincent_nicole 2008-11-25
  • 打赏
  • 举报
回复
同意6楼IT_HAWK 的答案: 110
cnn_505 2008-11-25
  • 打赏
  • 举报
回复
函数指针
cyj626 2008-11-25
  • 打赏
  • 举报
回复
multi

这个也没有啊.
chenlin0604 2008-11-25
  • 打赏
  • 举报
回复
很猛啊函数指针啊!
我只看过简单的应用,具体怎么用的我还不会,也就是说你的问题有点麻烦啊
我觉得还是不要用啊多用几个函数吧
IT_HAWK 2008-11-25
  • 打赏
  • 举报
回复
110
mifeixq 2008-11-25
  • 打赏
  • 举报
回复
恩,上面应该是写错了……
yangkunjie 2008-11-25
  • 打赏
  • 举报
回复
真的是散分?
加载更多回复(3)

69,371

社区成员

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

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