2017-02-18 64 views
-4
#include<iostream> 
int fun(int &x,int y=10) 
{ 
if(x%y==0) 
    return (++x); 
else 
    return (y--); 
} 
int main() 
{ 
int p=10,q=13; 
q=fun(p,q); 
cout<<p<<q<<endl; 
q=fun(q); 
cout<<p<<q<<endl; 
q=fun(p); 
cout<<p<<q<<endl; 
return 0; 
} 

如图所示的输出如下:如何手动跟踪C++程序?

1013 
1010 
1111 

但是,当我设法解决它使用笔和纸,我卡住了。请告诉我如何达到正确的输出,以保持我的概念清晰。

回答

0

P = 10,Q = 13

第一呼叫 P = 10,Q = 13 p被通过引用传递

返回将被y--因为它是交递减它会返回13

第二呼叫

q = 13 通过参考 X = 13ŷ传递= 10

回报将是y--其是= 10不是9,因为它是交

现在p值= 10和q = 10

第三呼叫 X = 10和y = 10默认 返回++ X和x = 11,所以q = 11,现在因为它是由ref x = 11调用的,所以p = 11和

+0

q = 10如何在第二次调用中.q通过引用传递,但未在函数中修改定义。是因为y--正在返回10吗? –

+0

这是因为在第二次调用中我们不传递任何第二个参数,所以相应地使用函数定义中的缺省值。 –

+0

谢谢@JaspreetSingh。帮助:) –