为什么函数总是引用一个特定的参数

Why does the function always refer to one specific parameter?

本文关键字:一个 参数 函数 引用 为什么      更新时间:2023-10-16

在下面的代码中:

int sum(int a=40, int b=20)
{
   int result;
   result = a + b;
   return (result);
}
int main ()
{
    int a = 100;
    int b = 200;
    int result;

    result = sum(a, b);
    cout << "Total value is :" << result << endl;

    result = sum(a);
    cout << "Total value is :" << result << endl;
    return 0;
}

这会产生:

 Total value is : 300
 Total value is : 120

为什么:

sum(a)

将第二个块中的 (int a) 添加到第一个块中的 (int b)?

我很困惑为什么在 (sum(a) 中使用第一个块中的 (b) 值,但忽略第一个块中的 (a) 值。

int sum(int a=40, int b=20) {
    ...
}
声明参数

a40b20,如果未指定。这是一个编译器服务,因此sum(a)变为sum(a, 20)b未指定)。与此类似,sum()变得sum(40, 20) . 方法sum中的ab是默认参数。

在函数sum中使用默认参数。这就是为什么当你打电话

result = sum(a); // where a = 100 and the second parameter is ommited

在函数sum中,第一个参数取这个调用方a (= 100)的值,当调用方端没有第二个参数时,默认的b (= 20)将用作b。因此结果是

100 + 20
= 120

正如大卫·罗德里格斯在第一条评论中建议的那样,使用不同的变量名称(比如sum (int x, int y)),以免歧义和更好地理解。

为了缩短它:

int sum(int a=40, int b=20)
{
   return a + b;
}
int main ()
{
    int a = 100;
    int b = 200;
    cout << "Total value is :" << sum(a, b) << endl;
    cout << "Total value is :" << sum(a) << endl;
    return 0;
}

sum(a,b)两个参数的值 => 它a+b => 100 + 200 这是300

在未设置第二个参数sum(a),函数使用默认值(即:20)=> a + 20 => 100 + 20120


您在 main 中定义的ab不是sum函数之一

好吧,您应该阅读一些有关C++默认参数的信息。在你在哪里,我建议你研究一些关于重载的信息,因为它们有些相关。

在第一次调用 sum() 函数时,为调用提供了两个参数,因此使用了您声明的变量 a 和 b,因此得到 100+200=300。在第二次调用时,您只提供一个参数,因此第二个参数使用默认参数值,即 a=100,b 获取默认值 (20),因此您得到 100+20=120。

当你编写一个函数时,比如 返回类型 Function_name(data_type some_value),则称为默认参数。

例如:如果你写一个函数,比如,int calculate_area(int length=20, int width=25)

然后,当您从main调用此函数时,您可以像这样将值传递给长度和宽度,

int main() {
  int a=50;
  int b=60;
  calculate_area(a,b);
}

或者你可以这样称呼它...

int main() {
    calculate_area();
}

看到区别,我们没有传递任何参数,它仍然是对函数的有效调用,因为在这种情况下......将考虑您提到的长度和宽度的默认值,在本例中为 20 和 25。

关于代码中的变量"a"和"b",看起来您在变量名称之间感到困惑。Main() 和 Sum() 是两个不同的函数。总和的"a"与主的"a"无关。当您阅读变量如何在堆栈中存储时,您将了解这一点。