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关键字的作用 在C语言中 static修饰函数的时候 静态函数:作用范围仅限于它的源文件,即只有本文件内才可以调用,函数名在其他文件内不可 见。 static...
  • lf1570180470
  • lf1570180470
  • 2017年02月22日 17:39
  • 522

c中关键字static的具体作用是什么?

static的作用     在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。 (1)先来介绍它的第一条也是最重要的一条:隐藏。 当我们同时编译多个文件时,所有未...
  • snn1410
  • snn1410
  • 2012年02月04日 09:56
  • 6108

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

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

C语言中关键字static、extern和auto的作用总结

1、首先说一下auto自动存储类型,一般我们很少在程序中显示申明变量为auto类型。因为代码块中的变量缺省情况下就是这种类型,这种类型的变量存放于堆栈中,也就是说只有程序执行这些代码块(一对{}之间的...
  • hmq252198885
  • hmq252198885
  • 2015年07月24日 16:54
  • 1526

简述static关键字在c/c++中的作用

在C语言中,关键字static有三个明显的作用: 1)在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(该变量存放在静态变量区)。 2) 在模块内(但在函数体外),一个被声明为...
  • qq_36631758
  • qq_36631758
  • 2017年07月27日 12:51
  • 1110

c语言中static的作用(精辟分析)

在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有...
  • jinzhichaoshuiping
  • jinzhichaoshuiping
  • 2016年01月08日 21:19
  • 650

c语言中的几个关键字

1.register:请求编译器尽可能的将变量存放在cpu的寄存器中。 用register关键字可以省去cpu从内存中提出数据的时间,提高程序的执行效率。 但是由于cpu中的寄存器是有限的,所以不...
  • Mormont
  • Mormont
  • 2016年11月20日 19:20
  • 655

(面试)C语言中关键字的总结

C语言中有很多的关键字,有register,static,const,extern,typedef,很多人可能只知道其表面含义,对其中的用法理解还不到位,希望这篇文章能帮助你:     1.regi...
  • xinianbuxiu
  • xinianbuxiu
  • 2016年07月25日 10:19
  • 448

C语言中static的使用

在开发过程中,我们经常会需要定义一些static类型的变量或者函数,我们接下来来具体聊一下static; 1、修饰变量      当static来修饰一个变量时,就注定了这个变量的可见范围和生命周...
  • lixiaojie1012
  • lixiaojie1012
  • 2014年04月30日 00:16
  • 1369

对C语言中的static关键字的深入理解

通过对static关键字的解析,讲述了其背后与编译,链接相关的原理。
  • on_1y
  • on_1y
  • 2014年04月22日 09:53
  • 14130
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c语言中关键字static的使用分析
举报原因:
原因补充:

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