问题 单项选择题

有以下程序:float f1(floatn) {returnn*n;}float f2(floatn) {return2*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)”定义了一个指向函数的指针变量 p1,此函数的返回值是 float 类型。在 main 函 数中,使得 p1 指向了函数 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。在输出 y1、y2 时,各浮点数占 3 列,小数位 数为 0,即输出了 8, 16。

选择题
单项选择题