Include int f(int a,int*b, int&c){ return(++a+++(*b)+c++);} int main(){ int a(3),...

+120 голосов
4.5m просмотров

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


Информатика | 4.5m просмотров
+98

Там надо с пояснениями

+106

запустить программу не судьба ?

Дан 1 ответ
+100 голосов

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

(6.9k баллов)
+47

я помню о переменных ровно до момента выхода

+167

Всм с без изменений

+104

В таких заданиях я всегда обычно переписываю и запускаю чтобы проверить свои размышления :)

+89

а с остается без изменений и в ответе 4228