• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c++变量作用域

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

变量作用域

 

一、局部变量

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

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

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#使用FileStream类从文本中读数据发布时间:2022-07-14
下一篇:
【总结】C++与C#中的struct结构体发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap