问题 单项选择题

有以下程序:
float f1(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.0));
t=p1;p1=p2;p2=t;
y2=p2(p1(2.0));
printf("%3.0f,%3.0f\n",y1,y2);

程序运行后的输出结果是______。

A.8,16

B.8,8

C.16,16

D.4,8

答案

参考答案:A

解析: 题目中(*p1)(float)定义了一个指向函数的指针变量pl,此函数的返回值是float类型。在main函数中,使得pl指向了函数f1,p2指向了函数f2。语句“y1=p2(p1(2.0))”先调用了p1函数,将其返回值4.000000传递给了f2的形参n,并使其函数返回值8.000000赋值给y1。然后在main函数中交换了p1、p2指针变量的指向,使p1指向了函数f2,p2指向了函数f1,并先调函数f2,得到返回值4.000000,使其传递给f1函数的形参n,并将带回的返回值16.000000赋值给y2。

问答题 简答题
单项选择题