华为C语言面试题目,输出内容的值

问题描述:

 11、写出下列代码的输出内容

  #include
  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("%dn",*arg2);
  }

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

  答:110

 INCp=&inc; ?
 int temp =p(arg1); ?

怎么弄的 问号是什么意思?

按照你的答案倒推,程序应该是这样的

 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*);
typedef int (*INC)(int);
void show(FUNC2 fun,int arg1, int*arg2)
{
INC p=&inc;
int temp =p(arg1);
fun(&temp,&arg1, arg2);
printf("%dn",*arg2);
}
int main()
{
int a;
show(multi,10,&a);
return 0;
}

根据你的代码,INC p中间少空格,p是一个函数指针,但是INC没有定义,这代码没法编译。
temp是调用这个函数指针,也就是调用inc函数。

printf("%dn",*arg2);
->
printf("%d",*arg2);
这也是一个错误

这个题目涉及的知识点就是C语言的函数指针。

typedef 相当于定义了一个函数类型 可以给这里类型赋值 也就是函数指针的意思

参照二楼的说法函数应该是那样的

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*);
typedef int (*INC)(int); //定义函数指针

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

INC p=&inc; //传递函数一
int temp =p(arg1); //得到函数一的返回值
fun(&temp,&arg1, arg2); //得到函数2的返回值

printf("%dn",*arg2);

}

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

搞定函数指针的定义和使用先。