作用域和块
现实中,凡事都有自己的适用范围,计算机语言中,变量也都有自己的作用域(Scope),所谓作用域,就是变量的可见范围,在某个作用域中定义了变量之后,我们可以使用、访问这个变量,但是出了这个作用域之后我们就无法使用这个变量了,
程序的作用域是自顶向下定义的,在最上级首先由一个全局作用域(Global Scope),全局作用域的变量可以在文件中的所有地方被访问,他也叫做全局变量(Global Variable),而其他非全局变量就叫做局部变量(Local Variable);而在其下,我们会用( {} )定义一个个的块( Block ),每个块都定义了一个层的作用域,而块中又能嵌套块,于是就有了层级的作用域结构。
基本作用域示例:
#include<iostream>
using namespace std;
//全局变量
int num = 3 ; //全局变量 num
int main()
{
cout << "num的值为:" <<num << endl;
int num = 2 ; //局部变量num
cout << "num的值为:" << num <<endl;
return 0;
}
输出结果为:
示例中,我们先声明了一个全局变量 num= 3,并在main函数中打印,而当我们在main函数中声明另一个同名局部变量后,打印出来的局部变量就变成了局部变量的2,可以说局部变量的生命周期是从定义到所在代码结束的这段代码,而内层的局部变量会屏蔽外层的同名变量,函数虽然不完全是一种块,但在代码分析中一般级别会高于块,我们也可以将花括号当中的内容看成块,而其中定义的也是局部变量。
除了函数自带的定义域外,我们也可以用{} 来自己定义一个块
#include<iostream>
using namespace std;
//
//块与作用域
int main()
{
int layer = 1 ;
cout << "layer的值为:" << layer << endl;
{
cout << "layer的值为:" << layer << endl;
int layer = 2 ;
cout << "layer的值为:" << layer << endl;
{
cout << "layer的值为:" << layer << endl;
int layer = 3 ;
cout << "layer的值为:" << layer << endl;
}
cout << "layer的值为:" << layer << endl;
{
cout << "layer的值为:" << layer << endl;
int layer = 3 ;
cout << "layer的值为:" << layer << endl;
}
cout << "layer的值为:" << layer << endl;
}
cout << "layer的值为:" << layer << endl;
return 0 ;
}
**输出结果为: **
通过观察某一行输出语句打印的layer的值,我们可以看到在不同块中声明的同名变量的影响范围,以及在块有嵌套的时候只有最里面的变量是可见的。
如果本文对你有帮助请点赞支持一下下~