2017-02-18 2 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

р = 10 д = 13

первый вызов р = 10, Q = 13 р передается по ссылке

будет возвращен y--, так как он является пост декремента он будет возвращать 13

второй вызов

д = 13 проходил мимо исх х = 13 у = 10

возвращение будет y-- что = 10 не 9, так как это сообщение

Теперь р = 10 и д = 10

третий вызов х = 10, у = 10 по умолчанию возврата ++ х и x = 11, так что q = 11, теперь, поскольку его вызов равен ref x = 11, поэтому p = 11 и

+0

Как q = 10 во втором вызове .q передается по ссылке, но не изменяется в функции Это потому, что y-- возвращает 10? –

+0

Thats, потому что во втором вызове мы не передаем второй аргумент, поэтому будет использовано значение по умолчанию в определении функции. –

+0

Спасибо @JaspreetSingh. Это помогло :) –

Смежные вопросы