разница между передачей параметров в функцию с использованием вызова по значению и вызова по ссылке

Каково возвращаемое значение f(p, p), если значение p инициализируется равным 5 перед вызовом? Обратите внимание, что первый параметр передается по ссылке, тогда как второй параметр передается по значению.

int f(int& x, int c)
{
  c = c — 1;
  if (c = = 0)
    return 1;

  x = x + 1;
  return f(x, c) * x;
}

person Alka Joshi    schedule 26.07.2020    source источник
comment
Это поможет вам stackoverflow.com/questions/373419/   -  person Pritesh    schedule 26.07.2020
comment
Ты это пробовал?   -  person n. 1.8e9-where's-my-share m.    schedule 26.07.2020
comment
Код недействителен.   -  person CiaPan    schedule 26.07.2020
comment
@CiaPan - почему вы говорите, что код недействителен? Это нормально, единственным ограничением является то, что вы не можете передать целочисленный литерал как x (и вам нужно удалить символы Unicode и заменить их на ASCII)   -  person David C. Rankin    schedule 26.07.2020
comment
Я говорю, что это неверно, потому что два последовательных оператора = в if (c = = 0) не соответствуют грамматике C++.   -  person CiaPan    schedule 26.07.2020
comment
Да, здесь вы правы, но, поскольку тире '-' был символом Unicode, это больше походило на ошибку копирования/вставки из Интернета, чем на преднамеренную.   -  person David C. Rankin    schedule 26.07.2020
comment
@DavidC.Rankin Я знаю. И, возможно, мой комментарий был слишком коротким и недобрым из-за этого. Но каким бы ни было происхождение кода, при передаче его компилятору код будет казаться недействительным. Во всяком случае, вопрос выглядит как тестовая задача для меня. Часть 'Обратите внимание, что...' звучит так, как будто это было сказано учителем, кем-то, кто точно знает, в чем хитрость кода и каким должен быть ответ.   -  person CiaPan    schedule 26.07.2020


Ответы (1)


Я подозреваю здесь UB, поскольку у вас нет гарантии, будет ли значение x выбрано для умножения до или после выполнения рекурсивного вызова f.

person CiaPan    schedule 26.07.2020