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