c++学习笔记(十八)变量的作用域

        作用域是程序的一个区域,一般来说有三个地方可以定义变量:

        1、在函数或一个代码块内部声明的变量,称为局部变量。

        2、在函数参数的定义中声明的变量,称为形式参数,简称形参。

        3、在所有函数外部声明的变量,称为全局变量。

        我会在之后说到函数的时候介绍形参,所以这里仅介绍局部变量和全局变量的定义。

局部变量:

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

void variable_scope()
{
    //初始化局部变量a,b
    //a,b只可以在当前函数,variable_scope中使用,其他函数中可以重新定义这两个变量
    int a = 10,b = 20;
    cout << a + b << endl;

    if (a == 10)
    {
        int i = 1;
        cout << i << endl;
        ++i;
    }
    //cout << i << endl;//error: 'i' was not declared in this scope
}

全局变量:

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

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

//定义全局变量j
int j = 9;
void variable_scope()
{
    cout << j << endl;

    if (a == 10)
    {
        ++j;
        cout << j << endl;
    }
}

  全局变量从定义处开始至程序结束起作用,即全局变量存在有效作用域。

        如果你的全局变量定义在cpp文件的末尾,那你在这个cpp文件中是无法使用定义的全局变量,这是代码的执行顺序决定的。代码的执行是由上而下的,全局变量被定义在末尾,则编译器是无法检测出在定义之前调用的此全局变量的。

void variables()
{
    h = 33;//error: 'h' was not declared in this scope
    cout << h << endl;
    return ;
}
int h = 0;

         你可以对此全局变量进行声明,从而将全局变量的定义写在代码文件的末尾。

 
void variables()
{
    extern int h;
    h = 33;//error: 'h' was not declared in this scope
    cout << h << endl;
    return ;
}
int h = 0;

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

//定义一个全局变量j
int j = 9;
void variable_scope()
{
    cout << j << endl;

    if (a == 10)
    {
        ++j;
        cout << j << endl;
    }
    j = 123;
    cout << j << endl;
}

        也可以在局部变量中定义和全局变量相同的变量,两者互不影响。在函数体内也可以存在重复定义的变量,但前提也是他们的作用域不同。所以养成良好的习惯,尽量避免变量命名的重复。如果你想在函数体或其他代码块中使用全局变量,你可以在变量名前通过域名在函数中引用到全局变量,不加域名解析则使用的是局部变量。

//定义一个全局变量j
int j = 9;
void variable()
{
    j = 123;
}
void variables()
{
    //定义if条件体中的局部变量j
    int j = 33;
    cout << j << endl;
    if(j == 33)
    {
        //使用域名解析调用全局变量
        cout << ::j << endl;
        //定义if条件体中的局部变量j
        int j = 45;
        cout << j << endl;
    }
    return ;
}

初始化局部变量和全局变量:

        当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动初始化为下列值:

数据类型初始化默认值
int0
char'\0'
float0
double0
pointerNULL

         正确地初始化变量是一个良好的编程习惯,否则有时候程序可能会产生意想不到的结果。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值