c语言中关键字static的使用分析

原创 2015年11月20日 15:41:25

 下面,详细分析一下static关键字在编写程序时有的三大类用法:

        一,static全局变量

           我们知道,一个进程在内存中的布局如图1所示:

      其中.text段保存进程所执行的程序二进制文件,.data段保存进程所有的已初始化的全局变量,.bss段保存进程未初始化的全局变量(其他段中还有很多乱七八糟的段,暂且不表)。在进程的整个生命周期中,.data段和.bss段内的数据时跟整个进程同生共死的,也就是在进程结束之后这些数据才会寿终就寝。

     当一个进程的全局变量被声明为static之后,它的中文名叫静态全局变量。静态全局变量和其他的全局变量的存储地点并没有区别,都是在.data段(已初始化)或者.bss段(未初始化)内,但是它只在定义它的源文件内有效,其他源文件无法访问它。所以,普通全局变量穿上static外衣后,它就变成了新娘,已心有所属,只能被定义它的源文件(新郎)中的变量或函数访问。

       二,static局部变量

      普通的局部变量在栈空间上分配,这个局部变量所在的函数被多次调用时,每次调用这个局部变量在栈上的位置都不一定相同。局部变量也可以在堆上动态分配,但是记得使用完这个堆空间后要释放之。

       static局部变量中文名叫静态局部变量。它与普通的局部变量比起来有如下几个区别:

           1)位置:静态局部变量被编译器放在全局存储区.data(注意:不在.bss段内,原因见3)),所以它虽然是局部的,但是在程序的整个生命周期中存在。

           2)访问权限:静态局部变量只能被其作用域内的变量或函数访问。也就是说虽然它会在程序的整个生命周期中存在,由于它是static的,它不能被其他的函数和源文件访问。

           3):静态局部变量如果没有被用户初始化,则会被编译器自动赋值为0,以后每次调用静态局部变量的时候都用上次调用后的值。这个比较好理解,每次函数调用静态局部变量的时候都修改它然后离开,下次读的时候从全局存储区读出的静态局部变量就是上次修改后的值。

        三,static函数
              1)没加static的函数可以被其他.c文件识别调用。

              2)static修饰的函数只能在本文件中使用。




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

面试点:关键字static(C语言面试题分析之三)

面试点:关键字static C语言面试题分析之三 一.            static全局变量与普通的全局变量的区别是什么?   全局变量分为两种: 1.statict全局变量; ...

黑马程序员_iOS开发C语言基础之关键字typedef、static、extern使用

1、typedef的基本使用 #include   /*   1.作用:给已经存在的类型起一个新的名称   2.使用场合     1>基本数据类型     2>...

【C语言】19-static和extern关键字1-对函数的作用

本文目录 一、extern与函数二、static与函数三、static、extern与函数的总结 说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,...

黑马程序员——C语言的关键字 typedef,static,extern和预处理指令

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流——-typedef一、typedef的作用给已经存在的数据类型起一个新的名字 定义格式:typedef 原有类型名 新名...

C语言中Static和Const关键字

C语言中Static和Const关键字的的作用 static作用:“改变生命周期” 或者 “改变作用域”  程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中...

c语言中的static和extern关键字

c语言中的static和extern关键字   资料1 1、  概念基础: 局部变量:函数内部定义的变量(包括定义在函数内部复合语句中的变量)。 全局变量:定义在函数外部...

C语言 Static关键字

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量...

【C语言】20-static和extern关键字2-对变量的作用

本文目录 一、在Java中,全局变量的定义没有严格的位置规定二、在C语言中,全局变量定义的位置是有限制的三、重复定义同一个变量四、不同源文件中的同名变量五、static关键字六、static和e...

C语言关键字:static,const,inline,volatile与assert()等

1.static (1)用于全局变量:外部静态变量,只能在本源文件中被引用,不能被其它源文件所引用。 (2)用于局部变量:局部静态变量,在函数返回后存储单元不释放;下一次调用该函数时,该变量为上次函数...

C语言之结构体、枚举、预处理和static,extern关键字 易错知识点

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 1.   结构体 数组和结构体的区别:   数组:只能由多个相同类型的数据构成   结构体...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c语言中关键字static的使用分析
举报原因:
原因补充:

(最多只允许输入30个字)