首页 > 试题广场 >

写出下列代码的输出内容() int inc(i

[填空题]
写出下列代码的输出内容1
  
    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)
  {
   FUNC1 * p=&inc;
   int temp =p(arg1);
   fun(&temp,&arg1, arg2);
   printf("%d\n",*arg2);
  }

  main( )
  {
   int a;
   show(multi,10,&a);
   return 0;
  }

推荐
考察的是函数名传递参数,以及 typedef,将各个函数及参数以伪代码展开:
1.  实参对应主函数: show(multi,10,&a)
    形参对应被调函数:void show(FUNC2 fun,int arg1, int* arg2)
                    = void show ( int fun(int*, int*, int*) , int arg1, int* arg2)
                  = void show ( int multi(int*, int*, int*) , int arg1, int* arg2) 
{
FUNC1 * p=&inc;        // int* p = &inc, p指向inc函数的地址
int temp =p(arg1);     //int temp = p(10) = inc(10) = 11;
fun(&temp,&arg1, arg2);//fun(&11, &10, &a) = multi(&11, &10, &a),得a = 11*10 = 110;
printf("%d\n",*arg2);  //结果是110
}

编辑于 2016-07-09 13:33:18 回复(4)
发表于 2016-09-13 11:11:18 回复(0)
传入是10并不是变量名字,会改变
发表于 2016-06-11 20:54:16 回复(0)
自己把乘看成了加(┬_┬)
发表于 2016-12-20 14:43:08 回复(0)
arg1的值始终保持为10,
发表于 2016-09-27 22:59:34 回复(0)
110
发表于 2016-07-09 10:10:17 回复(0)
110
发表于 2016-07-08 13:36:50 回复(0)
110
发表于 2016-05-15 15:50:49 回复(0)
有两个问题希望高手回答一下:
1.
typedef int(FUNC1)(int in);
FUNC1是函数类型还是函数指针类型?
2.
FUNC1 * p=&inc;
为什么不是 FUNC1 * p=inc;函数名inc作指针
发表于 2015-09-06 10:46:07 回复(4)
mark
发表于 2015-08-23 16:34:55 回复(0)
mark
发表于 2015-08-15 13:37:13 回复(0)
详解??

发表于 2015-06-26 17:34:28 回复(0)
110
发表于 2014-11-14 09:20:48 回复(0)
110
发表于 2014-10-25 00:25:58 回复(0)