函数是否可以访问直接外部作用域中的变量,而不向C+中的函数输入参数+;? 在直接外视镜中访问变量,而不向C++()中的函数输入参数。

函数是否可以访问直接外部作用域中的变量,而不向C+中的函数输入参数+;? 在直接外视镜中访问变量,而不向C++()中的函数输入参数。,c++,function,scope,nested-function,C++,Function,Scope,Nested Function,========= 下面是我正在编写的代码 #包括。。。 void ReadGrid(); void SaveGrid(); int main(){ ReadGrid(); } void ReadGrid(){ int m=1; int n[]={1,2,3}; 向量o(3,10); SaveGrid(); } void SaveGrid(){ int a=m; int b=n[1]; int c=o[1]; } 为什么我不能访问SaveGrid()中的ReadGrid()函数中的变量,调用S

=========

下面是我正在编写的代码

#包括。。。
void ReadGrid();
void SaveGrid();
int main(){
ReadGrid();
}
void ReadGrid(){
int m=1;
int n[]={1,2,3};
向量o(3,10);
SaveGrid();
}
void SaveGrid(){
int a=m;
int b=n[1];
int c=o[1];
}

为什么我不能访问
SaveGrid()
中的
ReadGrid()
函数中的变量,调用
SaveGrid()
时,
SaveGrid()
的本地作用域不将
ReadGrid()
的作用域视为全局的吗

每组大括号表示一个单独的作用域,因此,如果您创建一个带有大括号的块,并在其中声明变量,那么它们在它之外将不可见。如果创建大括号的嵌套块,则它们具有内部块访问外部块的权限,而不是相反

这不仅适用于函数(总是有其作用域),也适用于函数内部的块

i、 e.两个名为
i
的不同变量,由于范围不同,没有名称冲突:

{
   int i;
}

{
   int i;
}
我们可以进入这里

{
   int i;
   {
      int x = i;   <== in scope
   }

   int y = x; <== error
}
{
int i;
{

int x=i;否,但这是对象可以发挥作用的地方,例如,在此伪代码中,它们共享相同的数据:

class Grid {
private:
    int m;
    int n[];
    vector<int> o;

public:
    void ReadGrid(){
        // get m,n, and o
    }

    void SaveGrid() {
        // put m,n, and o
    }
}

int main(){
    Grid grid;
    grid.ReadGrid();
}
类网格{
私人:
int m;
int n[];
向量o;
公众:
void ReadGrid(){
//得到m,n和o
}
void SaveGrid(){
//把m、n和o放在一起
}
}
int main(){
网格;
ReadGrid();
}

您的问题的形式可能更好,因此:

当函数
a()
调用函数
b()
时,
b()
是否会自动查看所有
a()
的局部变量


答案是…不。它们仍然是不同的块作用域,不管您的调用堆栈如何。

不,我们试图做的是不合逻辑的

如果您希望m的值对ReadGrid和SaveGrid都可用,则必须将“m”定义为全局变量,您可以在ReadGrid中初始化它,并在SaveGrid中使用相同的值

以下是一个片段,供您参考

#include...
void ReadGrid();
void SaveGrid();

int m;// global variable 
int n[];//global variable

int main(){
ReadGrid();
}

void ReadGrid() {
m=1; 
n[]={1,2,3}; 
SaveGrid();
}

void SaveGrid() {
int a=m;
int b=n[1];
}

不,你认为为什么会这样?“在SaveGrid()中的ReadGrid()函数中”什么意思?<代码> RealGue< /Cuff>和<代码> SaveGrid <代码>定义在同一个范围内。在代码> > RealGue<代码>中,只有一个调用,它与任何内部定义范围无关。动态范围。在我的C++中没有!为什么有人甚至想要这个QyQuy非常感谢,我认为它们就像嵌套块范围。(当一个函数调用另一个函数时,变量将可用)。
#include...
void ReadGrid();
void SaveGrid();

int m;// global variable 
int n[];//global variable

int main(){
ReadGrid();
}

void ReadGrid() {
m=1; 
n[]={1,2,3}; 
SaveGrid();
}

void SaveGrid() {
int a=m;
int b=n[1];
}