| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1975 人关注过本帖
标题:不能理解C语言中变量的两个属性的含义
只看楼主 加入收藏
luruinet
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-11-19
收藏
 问题点数:0 回复次数:7 
不能理解C语言中变量的两个属性的含义
C语言中的变量有两个属性:存在性和可见性。请有心人给出例证。
在此谢过了
搜索更多相关主题的帖子: C语言 变量 含义 属性 
2008-11-19 22:50
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1687
专家分:4253
注 册: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: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1687
专家分:4253
注 册:2007-12-27
收藏
得分:0 
在变量存在的前提下,哪部分代码可以使用它称为可见性。可见性是个“空间”概念。
对于单文件源代码,
全局变量
对于其定义位置以下的函数,并且函数内部没有同名局部变量的可见。
对于定义与其上方的,但是用extern关键字引用之的函数可见。
局部变量
对于定义它的代码块可见。

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

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

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-11-19 23:08
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1687
专家分:4253
注 册: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
快速回复:不能理解C语言中变量的两个属性的含义
数据加载中...
 
   



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

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