| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 693 人关注过本帖
标题:求助关于静态变量的问题
取消只看楼主 加入收藏
giggsxbr
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-9-27
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
求助关于静态变量的问题
在网上看到这样解释静态变量的用法
如果某外部变量和函数仅供它们各自所在的源文件中的函数使用,而不能被其他函数访问,那么就必须使用static关键字定义外部变量和函数。static说明适用于外部变量与函数,用于把这些对象的作用域限定为被编译源文件的剩余部分。通过外部static对象,可以把一些外部变量和函数隐藏在某个源文件中,使得这些外部变量和函数仅仅可以被该源文件使用和共享,但不能被该源文件之外的函数所引用。


我疑惑的是
比如int i,如果不用static这个声明,那么其他文件里的函数不也不能使用i这个变量吗?因为要使用的话要先extern int i才行啊,那么static的作用在哪呢?


ps 这个论坛注册真麻烦啊。。。那些图我眼都快看瞎了,呵呵
搜索更多相关主题的帖子: 函数 其他 网上 
2011-09-27 11:47
giggsxbr
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-9-27
收藏
得分:0 
以下是引用TonyDeng在2011-9-27 12:43:00的发言:

你复习一下书上关于作用域的陈述。int i这样语句,放置在不同位置有不同的行为方式,你看清楚了。

如果在a.c文件里有一个int i=2
那么在b.c文件里如果不声明extern int i的话,也是无法使用a.c里面的那个i的
我这样理解的 是不是呢?
2011-09-27 15:05
giggsxbr
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-9-27
收藏
得分:0 
以下是引用A13433758072在2011-9-27 15:30:23的发言:

恩,对


那么加static和不加static有什么区别呢?我这样没有static,其他文件里的函数也不能使用啊(除非加一个extern申明)
2011-09-27 15:57
giggsxbr
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-9-27
收藏
得分:0 
以下是引用TonyDeng在2011-9-27 16:04:49的发言:

在函数体外,即在全局中,就是全局变量,与static是相同的效能。但static主要用局部作用域中,在其所处的花括号内,它是永远存在的,但在这个花括号之外,却不存在,这个特殊功能,正是全局变量不具备的。



如果某外部变量和函数仅供它们各自所在的源文件中的函数使用,而不能被其他函数访问,那么就必须使用static关键字定义外部变量和函数


我是看到了这句话,它说不能被其他函数访问的话就必须使用static,但是用我那个例子,即便不用static,其他函数访问的话也要破费一番周折啊
2011-09-27 16:16
giggsxbr
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-9-27
收藏
得分:0 
回复 8楼 TonyDeng
这样,我说一下我的想法吧

如果在1.c里面定义了int i,那么要想在2.c里面使用i这个变量,就需要声明一下extern int i。如果没有这个声明,那么2.c这个文件是不能使用i那个变量的,对不?那为什么要加上static,来让这个外部变量“不能被其他函数访问”呢?它本来就不能被其他文件的其他函数访问啊。(因为要访问要事先声明)

我是在看W.Kernighan和M.Ritchie编写的《The C Programming Language》中文版里看到这样的问题产生疑惑的。中文版的70页,在说那个波兰计算器问题的时候引入了静态变量,原文是“通过static限定外部对象,可以达到隐藏外部变量的目的....”可是我觉得本来就是隐藏的啊(因为要事先声明,才能使用)

我的理解应该是错的,但是错在哪呢?
2011-09-27 17:42
giggsxbr
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-9-27
收藏
得分:0 
回复 8楼 TonyDeng
这位小飞侠 我感觉我的语言表述能力有点差 希望没让你抓狂
2011-09-27 17:49
快速回复:求助关于静态变量的问题
数据加载中...
 
   



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

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