2014-11-15 10 views
-4

Я не понимаю, как работает этот код, можете ли вы объяснить это мне.C++ Указатели и ссылки и функции

#include <iostream> 
using namespace std; 

int fun (int &x, int &y) { 
    if (y<=0) 
     return x; 
    x=x+2; 
    cout<<x<<y<<endl; 
    return x*y; 
} 

int main() { 
    int x=5, y=-1; 
    cout <<fun(x,y)<<endl; 
    fun(y,x); 
    fun(x,y); 
    fun(y,x); 
    cout <<fun(x,y)<<endl; 
    return 0; 
} 

правильные ответы

5 
15 
71 
37 
93 
27 
+0

см. http://www.tutorialspoint.com/python/string_split.htm и i надеюсь, что вы знаете C++ – Venkatesh

+0

Каковы ваши конкретные проблемы? – chrizke

+0

вы отправили ссылку на python. И нет, я не знаю C++, поэтому я задаю вопрос. lol, что возвращают эти функции – Y28

ответ

1

Первый вызов функции cout << fun(x,y) << endl; пропускает х, как 5 и у как -1. Поскольку y меньше 0, функция просто возвращает x в cout, поэтому она печатает 5.

Следующий вызов функции fun(y,x), который все еще проходит -1 и 5, однако на этот раз значения передаются в обратном порядке, поэтому внутри функции x равен -1, а y равно 5. Поскольку y равно 5, оператор if равен false, а x присваивается -1 + 2 или 1. Затем x как 1 и y как 5 печатаются и умножается на два, но ничего выполняется с умноженным значением.

Третий вызов функции проходит через x и y, но в предыдущем вызове функции x (как y) было изменено на 1. Поскольку значение было передано как ссылка y, теперь оно равно 1. Итак, x равно с учетом 5 + 2 и x и y печатаются как 71.

Четвертый вызов функции передает x и y снова в обратном порядке. Итак, напомним, что x было изменено на 7, а y равно 1. Но значения находятся в обратном порядке, поэтому в нашей функции x равно 1, а y равно 7. Таким образом, снова x присваивается значение 1 + 2, и они печатаются как 3 и 7.

Наконец, последний вызов функции проходит через x и y, но помните, что x (как y) был изменен на 3. Итак, теперь x равно 7 и y равно 3. Еще раз x назначается 7 + 2 и x и y напечатаны как 93. Так как функция вызывается из инструкции cout, умножение 9 и 3 также печатается как 27.

+0

Большое вам спасибо, я ответил, что ответ был 71 не 7 1 – Y28

+0

@ Y28 Добро пожаловать. – dogwin