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修饰的函数只能在本文件中使用。




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

相关文章推荐

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

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

C语言中关键字const、static、volatile的用法分析

const 作为一个程序员,我们看到关键字”const”时,首先想到的应该是”只读”。因为,它要求其所修饰的对象为常量,不可对其修改和二次赋值操作(不能作为左值出现)。看几个例子: co...
  • yayawy
  • yayawy
  • 2016-05-16 16:07
  • 2154

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

C语言static关键字

学习C语言,变量的存储类型是一个比较容易混乱的地方,特意写下这篇博客来记录下。 static对于变量的影响: C语言变量: 按照作用范围(scope)来分: 1、全局变量 2、局部变量 全...

C语言关键字Static

C语言关键字static

C语言static关键字

转自http://see.xidian.edu.cn/cpp/html/436.html 不要误以为关键字static 很安静,其实它一点也不安静。这个关键字在C 语言里主要有两个作用,C++对它进行...

C语言关键字static

不是很明白C语言中的static,于是在网上搜了一下,找到了这个,整理成一篇博客,当作笔记。 从C程序开始讲起:       C程序一直由下列部分组成:        &...

C/C++中关键字static作用总结

最后对static的三条作用做一句话总结:static的最主要功能是隐藏,static变量存放在静态存储区,具备持久性和默认值0。

关键字static(c语言)

以下内容从《C与指针》(《POINTERS ON C》)第三章中摘取出来,该章节将作用域(scope)、链接属性(linkage)、存储类型(storage class)分析得很透彻。笔者会以stat...

c语言关键字static

第一个作用:修饰变量。变量又分为局部和全局变量,但它们都存在内存的静态区。   静态全局变量,作用域仅限于变量被定义的文件中,其他文件即使用extern 声明也没法 使用他。准确地说作用域是从定...

C语言 Static关键字

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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