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;
    }

  • 相关阅读:
    Get-CrmSetting返回Unable to connect to the remote server的解决办法
    Dynamics 365中的常用Associate和Disassociate消息汇总
    Dynamics 365 Customer Engagement V9 活动源功能报错的解决方法
    Dynamics Customer Engagement V9版本配置面向Internet的部署时候下一步按钮不可点击的解决办法
    Dynamics 365检查工作流、SDK插件步骤是否选中运行成功后自动删除系统作业记录
    注意,更改团队所属业务部门用Update消息无效!
    Dynamics 365的审核日志分区删除超时报错怎么办?
    Dynamics 365使用Execute Multiple Request删除系统作业实体记录
    Dynamics 365的系统作业实体记录增长太快怎么回事?
    Dynamics CRM日期字段查询使用时分秒的方法
  • 原文地址:https://www.cnblogs.com/expedition/p/11308293.html
Copyright © 2011-2022 走看看