美文网首页C语言知识库
详解C语言中的static

详解C语言中的static

作者: 丶Em1tu0F | 来源:发表于2018-07-10 17:38 被阅读5次

转载自# https://blog.csdn.net/keyeagle/article/details/6708077

C语言代码是以文件为单位来组织的,在一个源程序的所有源文件中,一个外部变量(注意不是局部变量)或者函数只能在一个源程序中定义一次,如果有重复定义的话编译器就会报错。伴随着不同源文件变量和函数之间的相互引用以及相互独立的关系,产生了extern和static关键字。

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

1、static全局变量

进程在内存中的布局如图1所示:


图1
  • .text段保存进程锁执行的二进制文件
  • .date段保存进程所有的已初始化的全局变量

数据段 常是指用来存放程序中已初始化的全局变量和已初始化的静态变量的一块内存区域。数据段属于静态内存分配。

  • .bss段保存进程未初始化的全局变量

BSS段 属于静态内存分配。通常是指用来存放程序中未初始化的全局变量和未初始化的局部静态变量。未初始化的全局变量和未初始化的局部静态变量默认值是0,本来这些变量也可以放到data段的,但是因为他们都是0,所以为他们在data段分配空间并且存放数据0是没有必要的。

当一个进程的全局变量被声明为static之后,它的中文名叫静态全局变量。静态全局变量和其他的全局变量的存储地点并没有区别,都是在.data段(已初始化)或者.bss段(未初始化)内,但是它只在定义它的源文件内有效,其他源文件无法访问它。

2、static局部变量

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

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

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

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

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

由于static局部变量的这种特性,使得含静态局部变量的函数变得不可重入,即每次调用可能会产生不同的结果。这在多线程编程时可能会成为一种隐患。需要多加注意。

3、static函数

跟C++面向对象编程中的private函数类似(私有函数只有该类的成员变量或成员函数可以访问)。在C语言中,也有“private函数”,它就是接下来要说的static函数,完成面向对象编程中private函数的功能。

当你的程序中有很多个源文件的时候,你肯定会让某个源文件只提供一些外界需要的接口,其他的函数可能是为了实现这些接口而编写,这些其他的函数你可能并不希望被外界(非本源文件)所看到,这时候就可以用static修饰这些“其他的函数”。

相关文章

  • 详解C语言中的static

    转载自# https://blog.csdn.net/keyeagle/article/details/67080...

  • C语言中static变量详解

    转:https://www.cnblogs.com/getyoulove/p/3656184.html Stati...

  • Static关键字的作用

    在C++、C、Java等高级语言中均有关键字static C语言中 static的含义不是存储方式,而是指对函数的...

  • static用法总结

    1 C语言中 在C语言中,static有三个明显作用: 函数体内static变量,不会随函数结束而消亡。再次调用该...

  • 关于static关键字

    1. 在C语言中的用法 在C语言中,static关键字意味着:隐藏 static变量存储在静态数据区,在程序一开始...

  • static和const的用途,const与define的区别

    一.Static的作用详述 摘要:C语言中,static的字面意思很容易把我们导入歧途。本文将对C/C++中Sta...

  • C语言中的static关键字

    @TOC C语言中的static关键字 static 关键字,意为静态。 static 变量 特性:全局变量在函数...

  • Static关键字

    C语言中的static关键字和Java的static关键字意义不一样。 1 用static修饰函数 static用...

  • c语言中static关键字用法详解

    概述 static关键字在c语言中比较常用,使用恰当能够大大提高程序的模块化特性,有利于扩展和维护。 但是对于c语...

  • 对C语言中static关键字的详解

    C语言代码是以文件为单位来组织的,在一个源程序的所有源文件中,一个外部变量(注意,不是局部变量)或者函数在整个源程...

网友评论

    本文标题:详解C语言中的static

    本文链接:https://www.haomeiwen.com/subject/mbkpsftx.html