C语言之变量

一、简介

C语言代码中的变量大致分两类,全局变量和局部变量;全局变量分为普通全局变量和静态全局变量,局部变量分为普通局部变量和静态局部变量。

  • 普通局部变量

  • 静态局部变量

  • 普通全局变量

  • 静态全局变量

二、局部变量

2.1 普通局部变量

  普通局部变量,也称局部变量,作用域在其定义的函数内;它的生命周期是,函数进入时创建,函数退出时消亡,其存储(内存)区域在栈中。

  如下图中,局部变量wPinInfo是进入此函数时创建,退出函数时消亡,别的函数无法使用这个变量。

2.2 静态局部变量

静态局部变量(普通局部变量前加static关键字),和普通局部变量一样在函数内定义,作用域在其定义的函数内;但不像普通局部变量,退出函数时会消亡,它始终存在着,其生存周期为整个源程序,其存储(内存)区域在全局(静态)变量区。

  如下图中,静态局部变量s_wPinInfor[2],第一次进入该函数时被创建,退出函数时依然存在且保存了被调用后留下的值,再次调用此函数时,进入函数时,此变量保持着上次调用后的值,直到该值被此函数更改。

  【注】静态局部变量使用中需要注意的问题是,若上图该函数被程序调用,在执行过程中被某中断函数打断,而在中断函数中此函数也刚好被调用,那么退出中断时,s_wPinInfo[2]的值保留了中断处理调用后留下的值,那么重新回到被打断时的该函数中,可能会导致s_wPinInfo[2]的值不是这次调用期望的值;即此变量存在着资源访问竞争,而普通局部变量不会有该问题。

三、全局变量

局变量,通俗的理解,就是其在全局也即整个文件中发挥作用,从其作用域理解,定义在函数体外部,或者主函数的外部,它的生命周期是在程序运行时创建,在程序退出时消亡,其存储(内存)区域在全局(静态)变量区。

3.1 普通 /静态全局变量的区别

  1. 普通/静态全局变量定义的区别是,静态的加static关键字

  2. 若程序由多个源文件构成,普通全局变量作用域是全部源文件;静态全局变量作用域为定义该变量的源文件,即对组成该程序的其它源文件是无效的。

  3. 不同源文件的静态全局变量可使用相同变量名,彼此相互独立,互不影响。

  4. 若程序仅由一个源文件构成时,全局变量与全局静态变量没有区别。

【注】全局变量和静态局部变量一样,存在着资源访问竞争问题。

四、对比表

变量生命周期作用域默认值内存区域
普通局部变量函数进入时创建,函数退出时消亡函数内随机值
静态局部变量函数进入时创建,程序退出时消亡函数内0全局(静态)变量区
普通全局变量程序运行时创建,程序退出时消亡程序所有源文件0全局(静态)变量区
静态全局变量程序运行时创建,程序退出时消亡定义的源文件0全局(静态)变量区
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值