CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

关于一道华为面试题目的疑问

楼主stecdeng()2006-07-10 08:55:27 在 C/C++ / C语言 提问

在社区帖子里看到一道面试的帖子  
  由于我是新人     有些看不懂  
  在此提问     希望大家指教  
   
   
   
  5、写出下列代码的输出内容  
  #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;  
  }  
  答:110  
   
   
   
  **************  
  请问这两句如何解释?  
  typedef   int(FUNC1)(int   in);  
  typedef   int(FUNC2)   (int*,int*,int*);  
  这个在编译时候出现问题  
  INCp=&inc;  
   
  INCp是指针?  
   
   
   
  谢谢  
   
  问题点数:40、回复次数:19Top

1 楼jixingzhong(瞌睡虫·星辰)回复于 2006-07-10 09:03:11 得分 0

请问这两句如何解释?  
  typedef   int(FUNC1)(int   in);  
  typedef   int(FUNC2)   (int*,int*,int*);  
   
  这个是   指针   别名定义Top

2 楼jixingzhong(瞌睡虫·星辰)回复于 2006-07-10 09:07:25 得分 10

INCp=&inc;  
  ==》  
  FUNC1   p   =&inc;  
   
  这里应该是定义   函数指针   p     ...  
   
  看主函数,传如   show   的10,   和   a,  
  show   中先调用   p   函数,指向了   inc   函数,运算使得   a   =   10++   =   11,  
  然后调用multi   函数,   结果是   10*11   =110Top

3 楼stecdeng()回复于 2006-07-10 10:22:53 得分 0

INCp在DEC   C++下运行出现  
  main.c   `INCp'   undeclared   (first   use   in   this   function)  
  提示  
   
   
  C++PRIMER上  
  只有  
  TYPEDEF   DOUBLE   WAGES;  
  TYPEDEF   INT   *PINT;  
  几个简单的例子  
  至于  
  typedef   int(FUNC1)(int   in);  
  typedef   int(FUNC2)   (int*,int*,int*);  
  难道是为INT引入(FUNC1)(int   in)助记类型?  
   
  谢谢  
   
   
   
  Top

4 楼WingForce(初六,履霜,坚冰至。)回复于 2006-07-10 11:05:53 得分 8

typedef   int(FUNC1)(int   int);  
  typedef   int(FUNC2)   (int*,int*,int*);  
   
  声明函数指针类型  
   
  FUNC1类型的东东是一个指向型如如  
   
  int   func_foo(int   a,   int   b);  
   
  的函数实体的指针  
  Top

5 楼laiwusheng(风清扬)回复于 2006-07-10 11:43:44 得分 2

typedef   int(FUNC1)(int   int);//FUNC1是被自定义为int   ()(int   in)函数指针类型的类型Top

6 楼stecdeng()回复于 2006-07-10 13:41:20 得分 0

func2为何没出现  
  typedef   int(FUNC1)(int   in);     IN是是否是INT少写了T字母  
  ******************  
  INCp=&inc;  
  ==》  
  FUNC1   p   =&inc;  
   
  这里应该是定义   函数指针   p     ...  
  为何出现main.c   `INCp'   undeclared   (first   use   in   this   function)  
  提示  
  也是笔误?Top

7 楼laiwusheng(风清扬)回复于 2006-07-10 13:59:52 得分 5

为何出现main.c   `INCp'   undeclared   (first   use   in   this   function)  
  提示  
  也是笔误?  
  ====================================  
  //确实笔误,应为:FUNC1   *p=inc;  
  //inc是int   inc(int   a);这个函数的地址;  
  //改了一下,运行成功!  
   
  #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);  
  typedef   int(FUNC2)(int*,int*,int*);  
   
  void   show(FUNC2   fun,int   arg1,   int*arg2)  
  {  
   
    FUNC1   *p=inc;  
  int   temp   =p(arg1);  
  fun(&temp,&arg1,   arg2);  
  printf("%d\n",*arg2);  
  }  
   
  main()  
  {  
  int   a;  
  show(multi,10,&a);  
  getch();  
  return   0;  
  }Top

8 楼cxyol(C++,VC 学习中......)回复于 2006-07-10 14:11:24 得分 5

TO:   WingForce(初六,履霜,坚冰至。)    
        typedef   int(FUNC1)(int   int);  
        typedef   int(FUNC2)   (int*,int*,int*);  
   
        声明函数指针类型  
   
        FUNC1类型的东东是一个指向型如如  
   
        int   func_foo(int   a,   int   b);的函数实体的指针  
   
  ------------------  
  原文中的typedef   int(FUNC1)(int   in);没有错吧。  
  要是指向int   func_foo(int   a,   int   b);的话应该是:  
  typedef   int(FUNC1)(int   ,int);注意里面的逗号呀!  
   
  -----------------------------------------------  
  TO:stecdeng()  
   
  func2为何没出现     //应该是FUNC2,注意大小写呀  
  typedef   int(FUNC1)(int   in);     IN是是否是INT少写了T字母  
  *******************************  
  void   show(FUNC2   fun,int   arg1,   int*arg2)   这里不是出现了?  
   
  不是少写了。Top

9 楼happytang(一只叫苏格拉底的猪)回复于 2006-07-10 14:17:42 得分 10

明显原题有错误,可能是笔误  
  INCp=&inc;无意义  
  改称:  
  FUNC1*   p   =   inc;  
  int   temp   =p(arg1);  
   
  分析一下  
  ==================================  
  #include   <iostream>  
  using   namespace   std;  
   
  //   返回a   +   1  
  int   inc(int   a){  
  return   a+1;  
  }  
  //   out   =   a*b  
  int   multi(int&   a,   int&   b,   int&   out){  
  return   out   =   a*b;  
  }  
   
  //   定义两种函数,FUNC1对应inc,   FUNC2对应   multi  
  typedef   int(FUNC1)   (int   in);  
  typedef   int(FUNC2)   (int&,int&,int&);  
   
  FUNC1*   p   =   inc;//原文这句写错了...orz...   INC根本没定义  
  int   numAdd1   =   p(   num   );  
  //   等价于   numAdd1   =   inc(   num   );  
  //   结果   num仍然是10,   numAdd1   =   11  
   
  //   调用func函数,可以看到,   main中传给func的是   multi.  
  //   所以调用的是   multi(   11,   10,   out   ),   out   =   110  
  func(   numAdd1,   num,   out   );  
  cout<<out<<endl;  
  }  
   
  int   main(){  
  int   a;  
  show(multi,10,   a);  
  return   0;  
  }  
  ==================================  
  Top

10 楼YeTimmy()回复于 2006-07-10 14:25:10 得分 0

函数指针可以这样定义吗???  
  DEV下通不过。。  
  typedef   int(*FUNC1)(int   in);  
  typedef   int(*FUNC2)   (int*,int*,int*);  
  要这样写我这才通的过:(Top

11 楼haha168_2002(啥时候我能成为高手啊?)回复于 2006-07-10 14:44:12 得分 0

终于懂了,谢谢大家,我看这题的时候也看得一头雾水。Top

12 楼stecdeng()回复于 2006-07-10 15:09:55 得分 0

多谢各位  
  总算是明白了  
   
  to   cxyol(C++,VC   学习中......)   (   )   信誉:98    
  我也笔错误  
  是FUNC1没出现  
   
   
  Top

13 楼stecdeng()回复于 2006-07-10 15:16:57 得分 0

YeTimmy()   (   )   信誉:100     2006-7-10   14:25:11     得分:   0      
     
     
         
  函数指针可以这样定义吗???  
  DEV下通不过。。  
  typedef   int(*FUNC1)(int   in);  
  typedef   int(*FUNC2)   (int*,int*,int*);  
  要这样写我这才通的过:(  
   
       
     
  一个指针一个引用     一个PRINTF     一个   COUT啊Top

14 楼paobo(吃螃蟹的鱼)回复于 2006-07-11 10:40:50 得分 0

学习一下Top

15 楼visual_alan()回复于 2006-07-11 14:49:33 得分 0

markTop

16 楼manplus(魅力加加)回复于 2006-07-11 15:25:31 得分 0

mrTop

17 楼kyozpeng(遍历红尘)回复于 2006-07-11 22:07:05 得分 0

嗯,以前只见过typedef   int(FUNC1)(int   int)这种方式申明来调用.dll中的方法,原来还可以这样利用.  
  Top

18 楼ajieyxw()回复于 2006-07-11 22:30:08 得分 0

改  
  void   show(FUNC2   fun,int   arg1,   int*arg2)  
  {  
  int   (*p)(int)=&inc;  
  //INCp=&inc;  
  int   temp   =p(arg1);  
  fun(&temp,&arg1,   arg2);  
  printf("%d\n",*arg2);  
  }  
  Top

19 楼ggyg1121()回复于 2006-07-13 17:38:44 得分 0

typedef   int(FUNC1)(int   int);  
  typedef   int(FUNC2)   (int*,int*,int*);  
  这是声明函数类型的,这个声明以后,可以用FUNC1来声明返回为整型,参数为两个int型的函数,  
  如:     FUNC1     inc;则函数inc就是一个返回为整型,参数为两个int型的函数.  
  第二行意思相同.  
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:stecdeng
  • jixingzhong
  • WingForce
  • laiwusheng
  • laiwusheng
  • cxyol
  • happytang

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo