- 19
- 0
- 约4.81千字
- 约 7页
- 2017-02-09 发布于重庆
- 举报
c语言关键字的用法详解
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 ? namespac
您可能关注的文档
- cpu调度实验报告.doc
- CPU过热故障分析与排除.doc
- cpvc和PPR的比较.doc
- CQI提升方案.doc
- Cqtpke浅谈中国新能源汽车.doc
- CRC市场细分研究模型.doc
- creep蠕变基础知识.doc
- CRD法开挖作业指导书.doc
- CRISPR及其在原核生物防御系统中作用的研究进展.doc
- CRM115核心价值应用.doc
- 2026年及未来5年内中国液体氩气行业投资前景及策略咨询研究报告.docx
- 2026年及未来5年内中国黄铜合页行业投资前景及策略咨询研究报告.docx
- 2026年及未来5年内中国竹工艺家具行业投资前景及策略咨询研究报告.docx
- 2025年中国微机数显自动分析仪市场调查研究报告.docx
- 2026年及未来5年内中国微尘白色粉笔行业投资前景及策略咨询研究报告.docx
- 2025年中国微电脑型压胶机市场调查研究报告.docx
- 2026年及未来5年内中国数字化等功游泳训练测试系统行业投资前景及策略咨询研究报告.docx
- 2025年中国圆形花瓶市场调查研究报告.docx
- 2026年及未来5年内中国植物纤维静淀过滤器行业投资前景及策略咨询研究报告.docx
- 2025年中国超音波手套机市场调查研究报告.docx
最近下载
- 广东省广州市花都区中考化学一模试卷 (2).doc VIP
- 隋玉杰-个案工作 第七章-个案工作的主要理论派别(下).pptx VIP
- 2025年江西省从“五方面人员”中选拔乡镇领导班子成员考试历年参考题库含答案详解.docx VIP
- 隋玉杰-个案工作 第八章-儿童辅导.pptx VIP
- 亲子关系量表-pianta编制-张晓,陈会昌修订.docx VIP
- 新《增值税法实施条例》逐条解读课件PPT.pptx
- 2025年湖南交通职业技术学院单招语文考试模拟试题及答案解析.docx VIP
- 2025至2030中国半导体控制整流器行业市场占有率及投资前景评估规划报告.docx VIP
- 药物应用护理第一第二节.ppt VIP
- GB50021-2024岩土工程勘察规范(附条文说明).pptx VIP
原创力文档

文档评论(0)