函数是否可以访问直接外部作用域中的变量,而不向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];
}