2

填空题 2 /101

写出下列代码的输出内容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
}