- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Static用法
static声明的变量在C语言中有两方面的特征:
1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。
2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。
特点
A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;
D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数)
E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。
函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。
扩展分析:术语static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。最后,C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java中此关键字的含义相同)。
关键字static的作用是什么?
这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:
在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
int testStatic()
{
?int x=1;
?x++;
?return x;
}
main()
{
?int i;
?for(i=0;i5;i++)
?printf(%d\n,testStatic());
?getch();
}
==》2 2 2 2 2
?
int testStatic()
{
?static ?int x=1;
?x++;
?return x;
}
main()
{
?int i;
?for(i=0;i5;i++)
?printf(%d\n,testStatic());
?getch();
}
==》2 3 4 5 6
在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
static关键字是C, ? C++中都存在的关键字, ? 它主要有三种使用方式, ? 其中前两种只指在C语言中使用, ? 第三种在C++中使用(C,C++中具体细微操作不尽相同, ? 本文以C++为准).
(1)局部静态变量
(2)外部静态变量/函数
(3)静态数据成员/成员函数
下面就这三种使用方式及注意事项分别说明
局部静态变量
在C/C++中, ? 局部变量按照存储形式可分为三种auto, ? static, ? register
( C语言程序设计(第二版) 谭浩强, ? 第174-175页)
与auto类型(普通)局部变量相比, ? static局部变量有三点不同
存储空间分配不同
auto类型分配在栈上, ? 属于动态存储类别, ? 占动态存储区空间, ? 函数调用结束后自动释放, ? 而static分配在静态存储区, ? 在程序整个运行期间都不释放. ? 两者之间的作用域相同, ? 但生存期不同.
static局部变量在所处模块在初次运行时进行初始化工作, ? 且只操作一次
3.对于局部静态变量, ? 如果不赋初值, ? 编译期会自动赋初值0或空字符, ? 而auto类型的初值是不确定的. ? (对于C++中的class对象例外, ? class的对象实例如果不初始化, ? 则会自动调用默认构造函数, ? 不管是否是static类型)
特点: ? static局部变量的”记忆性”与生存期的”全局性”
所谓”记忆性”是指在两次函数调用时, ? 在第二次调用进入时, ? 能保持第一次调用退出时的值. ?
示例程序一
#include ? iostream
using ? namespace
您可能关注的文档
- C语言程序设计60题.doc
- C语言程序设计0506-2-A试卷.doc
- C语言程序设计2012秋第三套作业.doc
- C语言程序设计 阅读程序题库及答案.doc
- c语言程序设计 第四章 输入输出和简单的顺序结构.doc
- c语言程序设计 第五章 程序控制流程——选择结构.doc
- C语言程序设计 函数试题.doc
- C语言程序设计 实验三 选择结构程序设计 答案《西北民大 电气学院》.doc
- C语言程序设计 题库管理系统.doc
- C语言程序设计 习题大全(含答案) C语言-2.doc
- 新外研版(3起)3年级上册英语全册课件(2024年新版教材).pptx
- 2024年新外研版英语3年级上册全册教学课件.pptx
- 2024年新西师大版1年级上册数学全册课件(新版教材).pptx
- 2024年新人教版1年级上册数学全册教学课件(新版教材).pptx
- 新湘教版7年级上册数学全册课件(2024年秋季新版教材).pptx
- 2024年秋季新人教版1年级上册数学全册教学课件.pptx
- 2024年秋季新译林版3年级上册英语全册教学课件.pptx
- 2024年新外研版小学3年级上册英语全册课件(新版教材).pptx
- 2024年新人教版数学1年级上册全册课件(新版教材).pptx
- 2025年春新人教版化学9年级下册全册教学课件 (2).pptx
文档评论(0)