• c++ 变量作用域


    变量作用域

    一、局部变量

    在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用

    #include <iostream>
    using namespace std;
     
    int main ()
    {
      // 局部变量声明
      int a, b;
      int c;
    
    // 实际初始化
      a = 10;
      b = 20;
      c = a + b;
     
      cout << c;
     
      return 0;
    }

    二、全局变量

    在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。

    全局变量可以被任何函数访问。也就是说,全局变量一旦声明,在整个程序中都是可用的。

    #include <iostream>
    using namespace std;
     
    // 全局变量声明
    int g;
    
    int main ()
    {
      // 局部变量声明
      int a, b;
     
      // 实际初始化
      a = 10;
      b = 20;
      g = a + b;
     
      cout << g;
     
      return 0;
    }

    局部变量和全局变量的名称可以相同,但是在函数内,同名的局部变量的值会覆盖全局变量的值

    #include <iostream>
    using namespace std;
     
    // 全局变量声明
    int g = 20;
     
    int main ()
    {
      // 局部变量声明
      int g = 10;
     
      cout << g;
     
      return 0;
    }

    结果: 10

    三、局部变量和全局变量的初始化

    示例:

    #include <iostream>
    using namespace std;
    
    // 全局变量声明
    int g = 99;
    
    // 函数声明
    int func();
    
    int main()
    {
        // 局部变量声明
        int g = 10;
        //cout << g;
        int kk = func();
        cout << kk;
        return 0;
    }
    
    // 函数定义
    int func()
    {
        return g;
    }

     在一个函数体内可以存在重名的变量,前提是它们的作用域不同

    #include <iostream>
    using namespace std;
    
    int main()
    {
        int b = 2;
        {
            int b = 1;
            cout << "b = " << b << endl;
        }
        cout << "b = " << b << endl;
    }

    当变量间出现重名的情况下,作用域小的屏蔽作用域大的,所以上面第一个 cout 输出 b 的值为 1,但由于在块里面申请的变量作用域只限于当前块,所以离开这个块后变量会自动释放,所以第二个 cout 输出 b 的值为 2

    全局变量的值可以在局部函数内重新赋值

    #include <iostream>
    
    using namespace std;
    
    // 全局变量声明
    int g = 20;
    int fun1(int a,int b){
        g=a+b;
        cout<<"被改变的全局变量为:"<<g<<endl;
        return 0;
    }
    
    int fun2(){
        cout<<"此时的全局变量为:"<<g<<endl;
        return 0;
    }
    
    int main(){
        fun2();
        fun1(10,20);
        fun2();
        return 0;
    }

     全局变量和和局部变量同名时,可通过域名在函数中引用到全局变量,不加域名解析则引用局部变量 

    #include<iostream>
    using namespace std;
    
    int a = 10;
    int main()
    {
        int a = 20;
        cout << ::a << endl;   // 10   【可引用也可以重新赋值】
        cout << a << endl;     // 20
        return 0;
    }

     C++全局变量 局部变量  静态全局变量  静态局部变量的区别

    全局变量和局部变量作用域不同,static 关键字可限定引用范围:

    #include <stdio.h>
    
    int s32Test;   // 定义全局变量,系统默认初始化0
    
    static void Fun();  // 声明只限定在被当前文件调用的函数
    
    
    static void Fun()
    {
        int s32Test = 1;  // 局部变量,如果不初始化,会是一个随机数值
    
        //与全局变量名相同,会屏蔽全局变量调用,s32Test = 1
        printf("This is Fun(),s32Test = %d!", s32Test);  
    }
    
    int main()
    {
        Fun();
        return 0;
    }

  • 相关阅读:
    前端 时间转换为时间戳 时间戳转时间
    RT, 吞吐量,并发用户数,QPS名词解释
    Bluetooth开发资料的收集
    Day20_学成在线项目就业指导
    Day20_docker相关xml
    Day20_Jenkins安装文档
    八段锦口诀
    Day20_GitLab安装文档
    Day20_GitCommand
    Day20_DevOps
  • 原文地址:https://www.cnblogs.com/expedition/p/11308293.html
Copyright © 2020-2023  润新知