zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    【笔记】求数据前n个主成分以及对高维数据映射为低维数据
    使用sklearn中的fetch_mldata的错误情况以及可能可行的解决方法
    【笔记】求数据的对应主成分PCA(第一主成分)
    【笔记】主成分分析法PCA的原理及计算
    【笔记】如何确定梯度计算的准确性以及调试梯度下降法
    【笔记】随机梯度下降法
    【笔记】线性回归中的梯度下降法(实现以及向量化并进行数据归一化)
    AttributeError: module 'numpy' has no attribute 'num'
    灵雀云CTO陈恺:从“鸿沟理论”看云原生,哪些技术能够跨越鸿沟?
    容器云在证券行业的探索与实践
  • 原文地址:https://www.cnblogs.com/expedition/p/11308293.html
Copyright © 2011-2022 走看看