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

C语言 作用域和生命周期


a.普通局部变量
属于某个{},在{}外部不能使用此变量,在{}内部是可以使用。执行到普通局部变量定义语句,才会分配空间,离开{},自动释放。普通局部变量不初始化,默认值为随机数。


b.static局部变量
属于某个{},在{}外部不能使用此变量,在{}内部是可以使用。在编译阶段就已经分配空间,初始化只能使用常量。static局部变量不初始化,默认值为0。离开{},static局部变量不会释放,只有整个程序结束才释放。
注意:静态局部变量的作用域属于某个{},但是它的生命周期却是从编译阶段到整个程序结束。


c.普通全局变量
在编译阶段分配空间,只有整个程序结束才释放。普通全局变量只要定义了,任何地方都能使用,使用前需要声明所有的.c文件,只能定义一次普通全局变量,但是可以声明多次(外部链接)。
注意:全局变量的作用域是全局范围,但是在某个文件中使用时,必须先声明。


d.static全局变量
在编译阶段分配空间,只有整个程序结束才释放。static全局变量只能在定义所在的文件中使用此变量(内部链接)。不同的.c文件,可以定义一次static全局变量。


e.extern函数和static函数的区别(作用域)
extern函数所有文件都是调用,所有文件中只能定义一次extern函数。
static函数只能在定义所在的文件中调用此函数,不同文件,可以定义一次static函数。


怎样记忆C语言中的作用域和生命周期?

要理解C语言中各种变量的作用域和生命周期,必须结合C语言的内存管理。详情见博客:http://blog.csdn.net/u011616739/article/details/61621815
全局变量和静态变量是在程序编译期就分配到数据段或bss段中的,在整个程序的运行期,数据段和bss段中的内容是不会发生改变的。所以所有的全局变量和静态变量的生命周期必定是从程序编译到程序运行结束。而且如果全局变量和静态变量没有初始化,会统一默认初始化为0.
而局部变量是在程序的运行时,在栈中分配的内存,所以生命周期一定是从程序运行的某一个时刻开始。
  • 11
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值