跨函数使用变量

时间:2016-01-28 20:55:45

标签: c++ function

假设我在一个函数中声明一个变量,如下所示:

void i() { int c; }

我怎样才能在不同的功能中执行此操作?

void j() {
    cout << c << endl;
}

4 个答案:

答案 0 :(得分:2)

让我们从基础开始:

在C ++中,变量的默认存储类是auto。

这意味着在块中声明的变量只有在声明它们之后才能在该块中可用。

一个块用花括号(循环,if语句,函数等)标记

void i() {

     //c is not declared here and is unavailable
     int c;
     //c is available 

        for(int i=0; i<2; i++)
        {
         //c is also available here, because it is declared in larger scope
        }
}
//c is not recognized here because it is declared only inside the scope of i()

 void j()
 {
  int c; //this is variable c. it has nothing to do with the c that is declared in i()

        for(int i=0; i<2; i++)
        {
         int d; //this variable gets created and destroyed every iteration
        }

  //d is not available here.
 }

默认情况下,在函数体内声明的变量将仅在声明点之后存在于该函数范围内。

在你的问题中,你没有描述你希望两个函数如何通信,因此很难指出一个合适的方法。

如果要在函数之间传递相同的值,则应该读入参数传递和函数返回值。还有另一种方法是全局变量,除非绝对需要,否则不推荐,但绝对需要学习。

答案 1 :(得分:1)

void j(const int c)
{
  std::cout << c << std::endl;
}

然后使用以下命令从您的函数中调用它:

j(c);

答案 2 :(得分:1)

最佳方法取决于您对c的实际操作。也就是说,如果c不是i()调用所独有的,那么您可以使用全局变量来访问它:

int c;
void i(){
  c = c++; //uses c, pun intended
}
void j(){
  cout << c << endl;
  c++; //can change c
}

如果每次调用c时都使用唯一i(),那么您可以在i()中对其进行定义,并且必须从{{1}内将其传递给j() }},否则i()不知道j()的位置:

c

请注意,void i(){ int c; j(c); } void j(int c){ cout << c << endl; c++; //cannot change c in i() } 中的c以及i()中的c不是同一个变量。如果您在j()中更改c,则j()中的i()将不会更改,与全局方法相同。

如果希望变量对于i()是唯一的,但j()可以访问,则可以通过指针(未显示)或refence(如下所示)传递变量:

void i(){
  int c=0;
  j(c);
}
void j(int &c){
  cout << c << endl;
  c++; //can change c in i()
}

注意:这里的术语相当随意,我甚至没有使用您可能想要了解更多信息的scope这个词。

答案 3 :(得分:-2)

变量c在调用j的上下文中不存在,因此您必须将其作为全局变量或返回值传递。

int i(){
    int c = 2;
    return c;
}

int i()将返回c,可以将其传递给其他构造函数。

void j(const int c){
    std::cout << c << std::endl;
}

或者更确切地说,在i内调用j

void j(){
    int cr = i();
    std::cout << cr << std::endl
}