下面程序的运行结果是【 】。 #include <iostream> using namespace std; void fun(int &a, int b=3) { static int i=2;

admin2009-02-15  21

问题 下面程序的运行结果是【  】。
   #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;
   }

选项

答案9,23

解析 本题主要考察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”。
转载请注明原文地址:https://kaotiyun.com/show/edkp777K
0

最新回复(0)