Include <iostream.h> int f(int a,int*b, int&c) { return(++a+++(*b)+c++); } int main() { int a(3), b(1),c(2); int z=f(c,&b,a); cout<<a<<b<<c<<z<<endl; cin.get(); }
Сигнатура функции f(int a, int *b, int &c). Первая переменная приходит по значению, вторая - по указателю, третья - по ссылке. Это значит, что изменения переменных b и с в функции будут влиять на переданные переменные.
Итак, мы имеем переменные
a = 3; b = 1; c = 2;
Передаём переменные в функцию как f(c, &b, a). Здесь а и с меняются местами.
В функции получаем
a = 2; b = 1; c = 3;
++a - увеличивает переменную на 1 и возвращает 3. a = 3
++(*b) - увеличивает переменную на 1 и возвращает 2. b = 2
с++ - возвращает 3 и увеличивает переменную на 1. с = 4.
Получаем return 3 + 2 + 3 (=8)
Переменные перед выходом
a = 3; b = 2; c = 4;
Выходим из функции. Не забываем про связь между переменными в вызове f(c, &b, a).
Преобразуем выражение в (++a)+(++(*b))+(c++).
Сигнатура функции f(int a, int *b, int &c). Первая переменная приходит по значению, вторая - по указателю, третья - по ссылке. Это значит, что изменения переменных b и с в функции будут влиять на переданные переменные.
Итак, мы имеем переменные
a = 3; b = 1; c = 2;
Передаём переменные в функцию как f(c, &b, a). Здесь а и с меняются местами.
В функции получаем
a = 2; b = 1; c = 3;
++a - увеличивает переменную на 1 и возвращает 3. a = 3
++(*b) - увеличивает переменную на 1 и возвращает 2. b = 2
с++ - возвращает 3 и увеличивает переменную на 1. с = 4.
Получаем return 3 + 2 + 3 (=8)
Переменные перед выходом
a = 3; b = 2; c = 4;
Выходим из функции. Не забываем про связь между переменными в вызове f(c, &b, a).
Значит после выхода переменные равны
a = 4; b = 2; c = 2 (передавалась по значению);
z = 8.
На выход будет подано 4228.