通常,范围被定义为可以使用某种东西的程度。在编程中,变量的范围也定义为程序代码的范围,在该范围内我们可以访问或声明或使用该变量。主要有两种类型的变量作用域:
- 局部变量
- 全局变量
现在,让我们更详细地了解每个范围:
局部变量
在一个函数或块中定义的变量被认为是那些函数的局部变量。
- “ {”和“}”之间的任何内容都说在一个块内。
- 局部变量在声明它们的块之外不存在,即,不能在该块外部访问或使用它们。
- 声明局部变量:局部变量在一个块内声明。
// CPP program to illustrate
// usage of local variables
#include
using namespace std;
void func()
{
// this variable is local to the
// function func() and cannot be
// accessed outside this function
int age=18;
}
int main()
{
cout<<"Age is: "<
输出:
Error: age was not declared in this scope
上面的程序显示一个错误,提示“未在此范围内声明年龄”。变量年龄函数func中声明(),所以它是局部的函数,这个函数外程序的部分不可见。
纠正的程序:要纠正以上错误,我们只需要显示函数func()的变量age的值即可。这在下面的程序中显示:
// CPP program to illustrate
// usage of local variables
#include
using namespace std;
void func()
{
// this variable is local to the
// function func() and cannot be
// accessed outside this function
int age=18;
cout<
输出:
Age is: 18
全局变量
顾名思义,可以从程序的任何部分访问全局变量。
- 在整个程序的生命周期内都可以使用它们。
- 它们在所有功能或块之外的程序顶部声明。
- 声明全局变量:全局变量通常在程序顶部的所有函数和块之外声明。可以从程序的任何部分访问它们。
// CPP program to illustrate
// usage of global variables
#include
using namespace std;
// global variable
int global = 5;
// global variable accessed from
// within a function
void display()
{
cout<
输出:
5
10
在程序中,变量“ global”在所有函数之外的程序顶部声明,因此它是全局变量,可以从程序中的任何位置访问或更新。
如果函数内部存在与全局变量同名的局部变量,该怎么办?
让我们再次重复这个问题。问题是:如果函数内有一个变量与全局变量同名,并且该函数试图访问具有该名称的变量,那么哪个变量将具有优先权?局部变量还是全局变量?查看以下程序以了解问题:
// CPP program to illustrate
// scope of local variables
// and global variables together
#include
using namespace std;
// global variable
int global = 5;
// main function
int main()
{
// local variable with same
// name as that of global variable
int global = 2;
cout << global << endl;
}
看上面的程序。在顶部声明的变量“ global”是全局变量,存储值5,而在main函数中声明的函数是local,并存储值2。因此,问题是何时存储在名为“ global”的变量中的值是从那么主要函数将是什么输出? 2还是5?
- 通常,当定义了两个具有相同名称的变量时,编译器会产生编译时错误。但是,如果变量是在不同的范围内定义的,则编译器会允许它。
- 只要定义了与全局变量同名的局部变量,编译器就会优先考虑该局部变量
同样在上面的程序中,名为“ global”的局部变量也被赋予了优先级。所以输出是2。
当存在具有相同名称的局部变量时,如何访问全局变量?
如果我们想做与上述任务相反的事情怎么办。如果存在具有相同名称的局部变量,如果我们要访问全局变量,该怎么办?
为了解决这个问题,我们将需要使用范围解析运算符。下面的程序说明了如何在范围解析运算符的帮助下执行此操作。
// C++ program to show that we can access a global
// variable using scope resolution operator :: when
// there is a local variable with same name
#include
using namespace std;
// Global x
int x = 0;
int main()
{
// Local x
int x = 10;
cout << "Value of global x is " << ::x;
cout<< "\nValue of local x is " << x;
return 0;
}
输出:
Value of global x is 0
Value of local x is 10