📜  C++中的变量范围

📅  最后修改于: 2021-05-30 01:53:30             🧑  作者: Mango

通常,范围被定义为可以使用某种东西的程度。在编程中,变量的范围也定义为程序代码的范围,在该范围内我们可以访问或声明或使用该变量。主要有两种类型的变量作用域:

  1. 局部变量
  2. 全局变量

C++中的可变范围

现在,让我们更详细地了解每个范围:

局部变量

在一个函数或块中定义的变量被认为是那些函数的局部变量。

  • “ {”和“}”之间的任何内容都说在一个块内。
  • 局部变量在声明它们的块之外不存在,即,不能在该块外部访问或使用它们。
  • 声明局部变量:局部变量在一个块内声明。
// 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
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”