问题 填空题

下面程序的运行结果是 【9】 。 #include <iostream> using namespace std; void fun(int &a, int b=3) { static int i=2; a = a + b + i; i = i + a; } int main() { int x=5, y=2; fun(x, y); cout<<x<<","; fun(x); cout<<x<<end1; return 0; }

答案

参考答案:I,BC

解析: 本题主要考察C++中变量的作用域、存储类别和参数默认值的使用。本题主函数中,第1次调用fun()函数时,利用实参x和y将5和2分别赋值给形参a和b;由于形参a为传址方式传值,因此在函数fun()内部,由于a的改变:a =a+b+i=5+2+2=9。导致实参x值也变为9,因此程序第1次输出x值为9。 此后静态局部变量i值变为:i=i+a=2+9=11。 主函数第2次调用fun()时,只给出了一个实参x,其值由上述计算应该为9,而另一个参数由于fun()函数定义中为形参b指定了默认值3,因此此时程序将把3作为形参b的值代入fun()函数中去。类似上面计算有:a=a+b+i=9+3+11=23。 由于形参a采用传址方式传值,因此实参x值也随之变为23,则程序第2次输出值应该为23。故程序整体输出为“9,23”。

单项选择题
问答题 简答题