C/C++ 中变量的作用域和生存周期

关键字:static extern auto

局部变量的作用域,起始于定义处,直到所在的大括号处结束。
全局变量的作用域,起始与定义处,知道本文件结束。

参考

先看几段代码,理解了他们就理解了作用域的概念:

 

//===代码1=====
#include<stdio.h>

int main() {
    int a = 10;
    {
        int a = 1; //这个a只作用于括号内
        printf("a = %d\n",a);//a = 1
    }
    printf("a = %d\n",a);//a = 10
    return 0;
}
/*整个程序的执行结果是:
a = 1
a = 10
说明括号内的变量作用不了括号外的变量*/

再看下面一段代码,与第一段代码的区别是第一个局部变量a没有给初始值:

//===代码2=====
#include<stdio.h>

int main() {
    int a;
    {
        int a = 1; //这个a只作用于括号内
        printf("a = %d\n",a);//a = 1
    }
    printf("a = %d\n",a);//a = ?
    return 0;
}
/*整个程序的执行结果是:
a = 1
a = 不可预测 ,我的电脑跑出来a = 2686756
*/

原因是,a 是局部变量,局部变量在计算机中存储在栈中,栈的值是之前存储在里面的值,所以是随机的。

再看第三段代码,假如第一个a是全局变量,也就是声明定义在main函数以外:

//===代码3=====
#include<stdio.h>

int a = 10;
int main() {
    a = 100;
    {
        int a = 1; //这个a只作用于括号内
        printf("a = %d\n",a);//a = 1
    }
    printf("a = %d\n",a);//a = 100
    return 0;
}
/*整个程序的执行结果是:
a = 1
a = 100
*/

值得注意的是,如果a是全局变量,默认初值为0,看第四段代码:

//===代码4=====
#include<stdio.h>

int a;
int main() {
    {
        int a = 1; //这个a只作用于括号内
        printf("a = %d\n",a);//a = 1
    }
    printf("a = %d\n",a);//a = 0
    return 0;
}
/*整个程序的执行结果是:
a = 1
a = 0
*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值