生存期和可见性的问题

可见性(作用域)à编译和链接过程:从对标识符的引用的角度来看,表示从内存作用域向外层作用域“看”时能看见什么
可见性分为全局可见,局部可见,块内可见,编译和链接只谈可见性
生存期à执行过程:对象从生产到结束的这段时间在生存期内,对象保存它的值,直到被更新为止(创建,调用,死亡的过程)。
当程序运行时,先要把全局变量写入数据区
当函数调动时,我们会在栈里面开辟一个栈帧,局部变量才能够存在,局部变量的生存期只有函数被调用才有,函数结束局部变量生存期就结束了,空间被收回

编译器从上到下编译程序。
块是指一对大括号括起来的程序段。块中定义的标识符,作用域在块中。
复合语句是一个块。复合语句中定义的标识符,作用域仅在该复合语句中。
函数也是一个块。
当函数域内定义的变量名称与块内定义的变量名称同名时,编译器的原则是局部优先原则。在这里插入图片描述

凡是在函数外部定义的变量都是全局变量(在.data区),凡是在函数内部定义的变量都是局部变量(在.stack区),(其中,用static关键字修饰的局部变量在.data区
当全局变量名与局部变量名冲突时,要使用全局变量,可以在其前加::(作用域解析符)

下面以代码为例解释说明:
生存期
在代码运行的过程中,首先执行main主程序,并给主程序分配栈桢,给x,y,z并赋值,当要调用mult函数时,给mult函数分配栈桢,执行该部分程序,遇到return时销毁该部分栈桢,继续执行主程序,当在主程序中遇到return时,主程序的栈桢销毁。

可见性
其中的x是全局变量,在代码运行过程中自上而下可见,y就不能在sum函数中调用和实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值