- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1. Static用法
1.1 static 声明的变量在 C语言中有两方面的特征:
1) 、变量会被放在程序的全局存储区中, 这样可以在下一次调用的时候还可以保持原来的赋值。
这一点是它与堆栈变量和堆变量的区别。
2) 、变量用 static 告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的
区别。
1.2 特点
A. 若全局变量仅在单个 C 文件中访问, 则可以将这个变量修改为静态全局变量, 以降低模块间
的耦合度;
B.若全局变量仅由单个函数访问, 则可以将这个变量改为该函数的静态局部变量, 以降低模块
间的耦合度;
C.设计和使用访问动态全局变量、 静态全局变量、 静态局部变量的函数时, 需要考虑重入问题;
D.如果我们需要一个可重入的函数, 那么, 我们一定要避免函数中使用 static 变量 (这样的函数
被称为:带 “内部存储器 ”功能的的函数 )
E.函数中必须要使用 static 变量情况 : 比如当某函数的返回值为指针类型时,则必须是 static 的
局部变量的地址作为返回值,若为 auto 类型,则返回为错指针。
函数前加 static 使得函数成为静态函数。但此处 “static 的含义不是指存储方式,而是指对函数”
的作用域仅局限于本文件 (所以又称内部函数 ) 。使用内部函数的好处是:不同的人编写不同的函
数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。
扩展分析 :术语 static 有着不寻常的历史 .起初,在 C 中引入关键字 static 是为了表示退出一个块
后仍然存在的局部变量。随后, static 在 C 中有了第二种含义:用来表示不能被其它文件访问的
全局变量和函数。为了避免引入新的关键字,所以仍使用 static 关键字来表示这第二种含义。最
后, C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此
类的任何特定对象的变量和函数 (与 Java 中此关键字的含义相同 ) 。
1.3 关键字 static 的作用是什么
这个简单的问题很少有人能回答完全。在 C 语言中,关键字 static 有三个明显的作用:
1.3.1 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不
变。
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
1.3.2 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用
函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
1.3.3 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。
那就是,这个函数被限制在声明它的模块的本地范围内使用。
static 关键字是 C, C++中都存在的关键字 , 它主要有三种使用方式 , 其中前两种只指
在 C 语言中使用 , 第三种在 C++中使用 (C,C++中具体细微操作不尽相同
文档评论(0)