何时声明为参数的变量?

时间:2015-07-16 16:21:23

标签: c++ variables parameters scope

这个问题正在扼杀我。我的教授告诉我,声明为函数参数的变量是在相关函数(持有这些变量的函数)被另一个函数调用时被创建的,并在完成执行时被销毁(在调用时执行)。如果发生这种情况,那么如何使用并将文字值分配给保存这些参数的函数范围内的参数变量?以下程序困惑我:

int myFunction (int x, int y)
{
     x = 5;
  //x is usable without declaration

     y = 8;
  //y is usable without declaration

     std::cout << x + y;
     return x-y;
 }

int main ()
{
    int x(7);
    int y (9);
    std::cout << myFunction (x, y);
    return 0;
 }

我的问题是,什么时候定义为函数参数的变量实际上是在创建。在调用该函数时或者只要调用函数(保存变量的函数)。

1 个答案:

答案 0 :(得分:1)

可视化函数参数的一种有用方法是将它们视为在函数 * 顶部声明的局部变量:

  • 参数仅在调用期间存在
  • 调用结束后,参数分配变得无关紧要
  • 并发调用的参数彼此独立
  • 无法从函数外部访问参数

唯一的区别是在进入函数之前为参数变量赋值,而在进入函数后为局部变量赋值

这个函数参数视图应该解释发生了什么。为简化说明,让我们将您的函数重写为使用不同标识符的等效函数:

int myFunction (int x, int y) {
     x = 5;
     y = 8;
     std::cout << x + y;
     return x-y;
}
int main () {
    int a(7);
    int b(9);
    std::cout << myFunction (a, b);
    return 0;
}

以下是正在发生的事情:当main准备致电myFunction时,它会生成两个新的不可见变量xy,并为其分配x=a }和y=b。然后它调用myFunction,其中这些新变量变为参数xymyFunction返回后,隐藏变量xy将被销毁。每次调用myFunction时都会发生同样的事情。

* 在C函数的早期版本中,确实声明的参数与局部变量完全相同,只是它们的声明放在函数声明的右括号和函数体的左大括号之间。 / p>