标题:不能理解C语言中变量的两个属性的含义
只看楼主
luruinet
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-11-19
 问题点数:0 回复次数:7 
不能理解C语言中变量的两个属性的含义
C语言中的变量有两个属性:存在性和可见性。请有心人给出例证。
在此谢过了
搜索更多相关主题的帖子: C语言 变量 含义 属性 
2008-11-19 22:50
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
auto局部变量在函数运行期间存在,一个函数结束运行以后,所有在它内部定义的auto的变量都会被销毁,其原本占用的内存空间被收回(接下来可能作别的用途),所以就不存在了。
static的局部变量自从第一次使用以后一直存在。
全局变量从头到尾一直都存在。

----存在性是个时间概念,它描述的是在某个时刻变量有没有占用内存单元。

[[it] 本帖最后由 forever74 于 2008-11-19 23:17 编辑 [/it]]

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-11-19 22:57
luruinet
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-11-19
得分:0 
那么“可见性”是怎么理解的呢?/
2008-11-19 22:59
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
在变量存在的前提下,哪部分代码可以使用它称为可见性。可见性是个“空间”概念。
对于单文件源代码,
全局变量
对于其定义位置以下的函数,并且函数内部没有同名局部变量的可见。
对于定义与其上方的,但是用extern关键字引用之的函数可见。
局部变量
对于定义它的代码块可见。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-11-19 23:03
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
可见性的覆盖性:
定义于复合语句的局部变量会挡住同名的定义于函数的局部变量,
局部变量会挡住同名全局变量。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-11-19 23:06
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
2楼的补丁:
定义于复合语句内部的auto局部变量的细致表现,俺还没探讨过。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-11-19 23:08
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
4楼的继续:
对于多文件源代码
static的“全局”变量实际上对于定义它的文件以外的代码不可见。
没说static的全局变量对于其他文件可以在用extern引用之后可见。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-11-19 23:12
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
得分:0 
简单说来,static的作用有两个:

1 让对象只具有本单位可见性(如文件,函数等)
2 让对象获得程序级的存在性(如全局静态变量,局部静态变量)

列表如下:
            全局性      可见性
全局对象    全程序      全程序
static对象  全程序      本模块  
auto对象    本模块      本模块

可以看到你无法获得本模块的全局性和全程序的可见性:可见性必须比全局性范围相等或更小,一个东西你都没有,还怎么看得见呢?
2008-11-20 00:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-245265-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.675541 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved