若有以下说明和定义,在必要的赋值之后,对fun函数的正确调用语句
是()。
int fun (int *c) { … }
void main()
{
int (*a)(int*)=fun,*b(),w[10],c;
…
}
A. a=a(w);
B. (*a)(&c);
C. b=*b(w);
D. fun(b);
解析:int fun (int c) { … }是一个返回值为int,参数为指针的函数
int (a)(int)=fun:函数指针;
A:a(w)参数传入w,w为数组,会被编译器优化为指针,没有毛病儿。但用a来接函数的返回值,a是一个指针,而返回值为int,二者类型不匹配。
B:c为int类型,&c则为int * 类型,类型匹配,是正确的。这里要着重说明一下,调用的话a(&c);即可,前面加了有,其实编译器都会给优化掉,即使是**********a(&c)仍然能够正确调用。
C:int * b()这个很具有疑惑性 它并不是函数指针,而是一个返回值为int * 型,无输入参数,而且名为b的函数声明明。显然C错误,函数指针要这么写int (*b)();再者b也不能作为返回值,不匹配。
D:fun函数的参数是int * 类型,b显然不是。