Предмет: Информатика, автор: anton4ik0111

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

Приложения:

Аноним: запустить программу не судьба ?
serd2011: Там надо с пояснениями

Ответы

Автор ответа: MaxLevs
0

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


serd2011: с++ - возвращает 3 и увеличивает переменную на 1. с = 4.
MaxLevs: Действительно
MaxLevs: Какая-то сишная порнуха получилась
serd2011: После выхода b=1 a=c(в функции) = 4
serd2011: b=2
serd2011: а с остается без изменений и в ответе 4228
serd2011: В таких заданиях я всегда обычно переписываю и запускаю чтобы проверить свои размышления :)
serd2011: Всм с без изменений
MaxLevs: я помню о переменных ровно до момента выхода
Похожие вопросы
Предмет: Другие предметы, автор: kryvbasssiti