普通/静态局部变量和普通/静态全局变量作用域、生命周期、链接属性总结

本文总结了C语言中普通局部变量与静态局部变量,以及普通全局变量与静态全局变量的作用域、生命周期和链接属性。普通局部变量存储于栈上,生命周期短暂,不可作为函数返回值。静态局部变量在数据段或bss段,生命周期贯穿程序运行,地址固定。全局变量使用static修饰可限制其作用域。编程时应注意全局变量的定义与声明,避免重名和过度使用。
摘要由CSDN通过智能技术生成

       普通局部变量分配在栈上,作用域为代码块作用域,生命周期是临时的,链接属性是无连接(编译时是一个函数形成一个单元,链接时是函数与函数之间的层次在交换,函数内部的局部变量与其他函数没有直接的联系,所以是无连接的)。  定义时未显式初始化其值是随机的(因为其分配在栈上,在栈上的内存其他变量用完时是不会清理内存的,所以通常说栈内存是脏的),变量地址由运行时在栈上分配得到的,多次执行时地址不一定相同(局部变量在分配空间时是哪里有位置就分配到哪里的,在函数结束时就会释放掉这块空间),函数不能返回局部变量的地址(指针)作为返回值(因为局部变量的地址时随机的,如果返回了该地址,其他函数访问该地址时,就不是该变量了)。

       静态局部变量分配在数据段/bss段(显式初始化为非0则在数据段,显式初始化为0或未显式初始化则在bss段),作用域为代码块作用域,生命周期为永久,链接属性为无连接,定义时如果未显式初始化默认为0,变量的地址由运行时环境在加载程序时确定,整个程序运行过程中唯一不变。数据段和bss段在本质上明显区别,是为了对内存进行优化。在对程序进行编译运行时,加载器会在全局变量里分配空间,只需要对数据段的变量和他的值挨个的拷贝,在bss段只要对其清零就可以。

       静态局部变量其实就是作用域为代码块作用域(链接属性为无连接)的全局变量。静态局部变量可以改为使用全局变量来实现,但是在程序中要尽量避免使用全局变量,太多全局变量的话会破坏程序的结构性。

       静态全局变量/静态函数和普通全局变量/普通变量的唯一差别时&

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
全局变量是在程序的任何地方都可以访问的变量,它的生命周期从程序开始执行到程序结束。全局变量作用域是整个程序。 静态变量是在函数内部定义的变量,但是它的生命周期不随函数的调用而结束,而是在整个程序执行期间保持不变。静态变量的作用域定义它的函数内部。 局部变量是在函数内部定义的变量,它的生命周期从函数被调用开始到函数执行结束。局部变量作用域定义它的函数内部。 静态局部变量是在函数内部定义静态变量,它的生命周期作用域静态变量相同。静态局部变量只会在第一次调用函数时被初始化,之后每次调用函数时都会保持上一次调用的值。 范例:<<引用:全局变量生命周期作用域是指全局变量在程序中存在的时间和可访问的范围全局变量生命周期从程序开始执行到程序结束,而全局变量作用域是整个程序。静态变量的生命周期作用域全局变量相似,但是它们是在函数内部定义的。局部变量生命周期从函数被调用开始到函数执行结束,而局部变量作用域定义它的函数内部。静态局部变量是在函数内部定义静态变量,它的生命周期作用域静态变量相同。静态局部变量只会在第一次调用函数时被初始化,之后每次调用函数时都会保持上一次调用的值。>>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值