问题 单项选择题

有以下程序
float fl(float n)
return n*n;
float f2(float n)
return 2*n;
main()
float(*p1)(float),(*p2)(float),(*t)(float),y1,Y2;
p1=f1; p2=f2;
y1=p2(p1(2.O));
t=p1; p1=p2; p2=t;
y2=p2(pl(2.0));
printf("%3.0f,%3,Of\n",y1,y2);

程序运行后的输出结果是

A) 8,16
B) 8,8
C) 16,16
D) 4,8

答案

参考答案:A

解析: 题目一开始定义了两个函数,f1()实现的是返回参数的平方;f2()实现的是返回参数的2倍。接下来在主函数中定义了三个函数指针p1,p2,t。语句p1=f1;p2=f2;让指针p1指向函数n(), 指针p2指向函数9()。 然后调用 p2(p1(2.0)),即让2先平方再乘以2,结果为8并赋给y1。然后语句序列t=p1;p1=p2;p2=t;交换了p1和 p2的值, 即p1指向f2(),p2指向f1()。再调用 p2(p1(2.0)),让2先乘以2再平方,结果为16赋给 y2.最后输出y1,y2的值为8和16,应该选择A。

填空题
单项选择题