急,C++里面定义变量的作用域,能讲解下吗

来源:百度知道 编辑:UC知道 时间:2024/05/29 06:08:50
主程序里定义的变量作用域是什么,子程序里定义的变量作用域是什么,讲解下吧,谢啦谢啦

作用域主要有全局作用域,函数作用域,条件作用域等。
如下:
int a;
int main()
{
int a = 1;
for(int i = 0; i ! = 10; ++i)
{
int a = 2;
}
}

第一个a就是全局作用域,第二个是函数作用域,第三个a就是条件作用域。
作用域的一个很大的作用是避免重名。
就像你在两个文件夹里放了两个同名的文件但系统不会提示重名一样。
在子程序的作用域里定义的变量会覆盖更大范围的变量,如同在for循环里定义的a=2,它屏蔽了大的作用域里的初始化值。

1楼讲的基本正确。

不过第一个a不是全局作用域,也是函数作用域。

如果将上面的程序这么修改

int b;

int main()
{
int a = 1;
for(int i = 0; i ! = 10; ++i)
{
int a = 2;
}
}

这里的b则是全局作用域。

从编译过程讲,编译器每发现一个变量,就会在相应的静态数据区为他产生一个申明,申明的同时会附上一个值表明他所在的作用域范围。判断方法是查看他产生的语法树节点的父节点。如果父节点是一个函数申明,那么就是当前函数内部;如果是一个表达式或者statement,那么就约束在表达式或者函数本身。