C语言中auto,static,register,extern存储类型的用法

C语言中auto,static,register,extern存储类型的用法

ID:40527320

大小:159.65 KB

页数:7页

时间:2019-08-04

C语言中auto,static,register,extern存储类型的用法_第1页
C语言中auto,static,register,extern存储类型的用法_第2页
C语言中auto,static,register,extern存储类型的用法_第3页
C语言中auto,static,register,extern存储类型的用法_第4页
C语言中auto,static,register,extern存储类型的用法_第5页
资源描述:

《C语言中auto,static,register,extern存储类型的用法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、在C语言中提供的存储类型说明符有auto,extern,static,register,说明的四种存储类别。四种存储类别说明符有两种存储期:自动存储期和静态存储期。其中auto和register对应自动存储期。具有自动存储期的变量在进入声明该变量的程序块是被建立,它在该程序块活动时存在,退出该程序块时撤销。Auto在函数内部定义的变量成为局部变量。局部变量称为自动变量,这就与使用可选关键字auto定义局部变量这一作法保持一致。局部变量仅由其被定义的模块内部的语句所访问。换言之,局部变量在自己的代码

2、模块之外是不可知的。切记:模块以左花括号开始,以右花括号结束。对于局部变量,要了解的最重要的东西是:它们仅存在于被定义的当前执行代码块中,即局部变量在进入模块时生成,在退出模块时消亡。定义局部变量的最常见的代码块是函数。请见以下代码:#include"stdio.h"main(){inti,num;num=2;for(i=0;i<3;i++){printf("Thenumequal%d",num);num++;{autointnum=1;printf("Theinternalblocknume

3、qual%d",num);num++;}}}运行的结果为:其实现在都不用打上auto了,编译器默认为auto的不信可以把auto删除试试。StaticC语言中,存储类型static字面意思很容易把我们导入歧途,其实它的作用有三条,1,隐藏。这也是最重要的一条。2,static的第二个作用是保持变量内容的持久。3,第三个作用是默认初始化为0。(1)这里就先说第一条,当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。我举例来说明。我们要同时编译两个源文件,一个是m

4、y.c,另一个是main.c。下面是my.c的内容chara='m';//m为全局变量voidmyage(){printf("myageis25");}下面是main.cintmain(void){externcharm;//外部属性的变量使用前一定要先声明printf("%c",m);(void)myage();return0;}运行的结果是:mmyageis25为什么在my.c中定义的全局变量m和函数myage能在main.c中使用?前面说过,所有未加static前缀的全局变量和函数都具有

5、全局可见性,其它的源文件也能访问。此例中,m是全局变量,myage是函数,并且都没有加static前缀,因此对于另外的源文件main.c是可见的。如果加了static,就会对其它源文件隐藏。例如在m和myage的定义前加上static,main.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏,而对于变量,static还有下面的作用。(2)保持变量内容的持久性。存储在静态数据

6、区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。这种用法也比较常见,如下面的例子:#include"stdio.h"main(){inti,num;num=2;for(i=0;i<3;i++){printf("Thenumequal%d",num);num++;{staticintnum=1;printf("40:Theint

7、ernalblocknumequal%d",num);num++;}}}运行的结果:(3)默认初始化为0其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵,我们可以一个一个地把所有元素都置0,然后把不是0的几个元素赋值。如果定义成静态的,就省去了一开始置0的操作。再比如要把一个字符数组当字符串来用,但又觉得每次在字符数组末尾加’’太麻烦。如果把字符串定义成静态的,就省去

8、了这个麻烦,因为那里本来就是’’。不妨做个小实验验证一下:#includeinta;intmain(void){inti;staticcharstr[10];printf("integer:%d;string:(begin)%s(end)",a,str);return0;}程序的运行结果如下integer:0;string:(begin)(end)最后对static的三条作用做一句话总结。首先static的最主要功能是隐藏,其次因为static变量存放在静态存

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。