问题描述
- 华为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;
}
解决方案七:
搞定函数指针的定义和使用先。