Я не понимаю, почему mysteryfunction (y) будет равняться 40
когда я int mysteryFunction (int, int = 2). Кто-нибудь может мне объяснить?
Бест, ММ
#include <iostream>
using namespace std;
int mysteryFunction (int, int = 2);
int main()
{
int x = 10, y = 20;
cout << mysteryFunction (y);
}
int mysteryFunction (int x, int y)
{
return x * y;
}
В декларацииmysteryFunction()
второму параметру присваивается значение по умолчанию 2
, так что если вы называете это только с одним аргументом второй аргумент y
будет 2
,
Следовательно делать mysteryFunction(20)
в основном то же самое, что и mysteryFunction(20, 2)
, который по вашему коду должен вернуть 20 * 2 = 40.
Вы могли быть смущены тем фактом, что переменная, которую вы передаете mysteryFunction()
как его первый аргумент назван y
, так же, как второй параметр в его определении. Однако это совершенно разные переменные. На самом деле, не имеет значения, как вы их называете, имеет значение только положение аргументов / параметров (вместе с их типом, если принять во внимание перегрузку функций).
По умолчанию они предполагают, что у будет 2, поэтому, когда вы заполните int x, оно автоматически примет (x, 2).
В вашей декларации для mysteryFunction
вы задаете значение по умолчанию 2 для второго аргумента. Затем вы вызываете его только с одним аргументом, поэтому для второго аргумента используется значение по умолчанию. Так что y = 20 и 20 * 2 = 40. Не путайте имена переменных. x
а также y
в main
не имеет ничего общего с x
а также y
в mysteryFunction