Регистрация
Войти
Стать экспертом Правила
Информатика

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();}​

ОТВЕТЫ

Преобразуем выражение в (++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 и возвращает . a = 3

++(*b) - увеличивает переменную на 1 и возвращает . b = 2

с++ - возвращаети увеличивает переменную на 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.

На выход будет подано .

696
Контакты
Реклама на сайте
Спрошу
О проекте
Новым пользователям
Новым экспертам