C语言中变量的作用域和生命周期

        一.作用域和生命周期:

       1.作用域:

       通常来说,一段程序代码中所用到的名字并不总是有效 / 可用 的。而限定这个名字的可用性的代码范围就是这个名字的作用域。俗话说的好,“能力越大,责任也就越大。”,当变量的能力越大时,它能做的事情就很多,涉及的范围也很广,当变量能力越小时,则相反。

        2.生命周期:
       概念:变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。

       生命周期,字面意思上我们可以理解为一个人的寿命期限,就好比说一个人从刚生下的充满活力婴儿到油尽灯枯的过程,从有到无,从生到死。变量的生命周期也是如此,从创建下占用内存开始,一直持续到内存的释放。变量保留其值的时间被称为变量的生命周期。当变量失去自己的作用域时,它便不再具有值。而上面我们所说的作用域,它就决定了变量的生命周期。说明作用域不同,生命周期也就不一样。

      生命周期好比孙悟空用金箍棒给唐僧画的一个圈圈,把唐僧保护住,不让妖怪抓住他,但唐僧也只能呆在圈子里,出不去。而C中的花括号便是起到这样的效果。

    

 对于初学者来说,文字的讲解也只能诉说一部分内容,我们并不能get到具体的点。接下来,我们进入VS中试验一下。

1.首先,我么先来介绍一下全局变量,及其它的作用。

    a. 全局变量的作用域是整个工程。       

    b. 全局变量的生命周期是:整个程序的生命周期。

 "全局"的意思其实就是纵观全局,它是定义在代码块({ })之外的变量。我们先创建一个主函数,在主函数的外围创建一个变量a,在主函数内我们创建一条语句去输出变量a的值,运行后发现a的值为100。

之后我们在main函数外面去创建一些函数test1,test2(这里的函数,我们可以称之为新开辟的一个范围,其实main中也是一个范围!),再去输出变量a的值,我们可以发现,结果都是100。原因就在于变量a的位置,a处在众多范围的最外围,就好比上帝视角一般,可以清楚的看到每一个范围中的内容,这便是纵观全局。

所以说全局变量的作用域范围是整个工程,那么它的生命周期便可以延续到整个工程结束才会被内存释放掉。

2. 其次我们来介绍局部变量的作用域和生命周期

  a. 局部变量的作用域是变量所在的局部范围。
    b. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。

        所谓局部,它只是全局中的一部分东西。它则是定义在代码块({ })之内的变量。如图所示,我在主函数中创建了一个变量num1,将它放在一对花括号里,这两个花括号构成了一个范围,整体上去看就是在一个大括号里面又放了一个小括号,那么当在花括号的外围去输出num1时,系统显示报错,就是因为num1只处在局部范围中。        

        

 

 看完了这些我们就可以明白,局部变量只可作用到它本身的范围中,不能影响到全局的范围中,而全局的变量可以作用到到任何一个局部中。这就是作用域的意义。而局部变量的生命周期也只会随着花括号的建立而出现,到另一个花括号的结束而消失。

3.还有一点需要注意的是:当局部变量与全局变量的名字相同的时候,在范围中局部变量会被优先选择,就好比英语中的就近原则一个道理。所以建议不要采用两个相同名字的全局部变量,不仅容易搞混,还容易产生bug。

 

  • 9
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙予清的zzz~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值