C语⾔STATIC⽤法
C语⾔STATIC⽤法
1. static 变量
  静态变量的类型说明符是static。静态变量当然是属于静态存储⽅式,但是属于静态存储⽅式的量不⼀定就是静态变量。例如外部变量虽属于静态存储⽅式,但不⼀定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。
  2. 静态局部变量
  静态局部变量属于静态存储⽅式,它具有以下特点:
  (1)静态局部变量在函数内定义它的⽣存期为整个源程序,但是其作⽤域仍与⾃动变量相同,只能在定义该变量的函数内使⽤该变量。退出该函数后,尽管该变量还继续存在,但不能使⽤它。
  (2)允许对构造类静态局部量赋初值例如数组,若未赋以初值,则由系统⾃动赋以0值。
  (3)对基本类型的静态局部变量若在说明时未赋以初值,则系统⾃动赋予0值。⽽对⾃动变量不赋初值,
则其值是不定的。根据静态局部变量的特点,可以看出它是⼀种⽣存期为整个源程序的量。虽然离开定义它的函数后不能使⽤,但如再次调⽤定义它的函数时,它⼜可继续使⽤,⽽且保存了前次被调⽤后留下的值。因此,当多次调⽤⼀个函数且要求在调⽤之间保留某些变量的值时,可考虑采⽤静态局部变量。虽然⽤全局变量也可以达到上述⽬的,但全局变量有时会造成意外的副作⽤,因此仍以采⽤局部静态变量为宜。
  3.静态全局变量
  全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本⾝就是静态存储⽅式,静态全局变量当然也是静态存储⽅式。这两者在存储⽅式上并⽆不同。这两者的区别虽在于⾮静态全局变量的作⽤域是整个源程序,当⼀个源程序由多个源⽂件组成时,⾮静态的全局变量在各个源⽂件中都是有效的。⽽静态全局变量则限制了其作⽤域,即只在定义该变量的源⽂件内有效,在同⼀源程序的其它源⽂件中不能使⽤它。由于静态全局变量的作⽤域局限于⼀个源⽂件内,只能为该源⽂件内的函数公⽤,因此可以避免在其它源⽂件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储⽅式即改变了它的⽣存期。把全局变量改变为静态变量后是改变了它的作⽤域,限制了它的使⽤范围。因此static 这个说明符在不同的地⽅所起的作⽤是不同的。
  4. static 函数…..
  内部函数和外部函数
  当⼀个源程序由多个源⽂件组成时,C语⾔根据函数能否被其它源⽂件中的函数调⽤,将函数分为内部函数和外部函数。
  1 内部函数(⼜称静态函数)
  如果在⼀个源⽂件中定义的函数,只能被本⽂件中的函数调⽤,⽽不能被同⼀程序其它⽂件中的函数调⽤,这种函数称为内部函数。
  定义⼀个内部函数,只需在函数类型前再加⼀个“static”关键字即可,如下所⽰:
  static 函数类型函数名(函数参数表)
  {……}
  关键字“static”,译成中⽂就是“静态的”,所以内部函数⼜称静态函数。但此处“static”的含义不是指存储⽅式,⽽是指对函数的作⽤域仅局限于本⽂件。
  使⽤内部函数的好处是:不同的⼈编写不同的函数时,不⽤担⼼⾃⼰定义的函数,是否会与其它⽂件中的函数同名,因为同名也没有关系。
  2 外部函数
  外部函数的定义:在定义函数时,如果没有加关键字“static”,或冠以关键字“extern”,表⽰此函数是外部函数:
  [extern] 函数类型函数名(函数参数表)
  {……}
  调⽤外部函数时,需要对其进⾏说明:
  [extern] 函数类型函数名(参数类型表)[,函数名2(参数类型表2)……];
  案例]外部函数应⽤。
  (1)⽂件mainf.c
  main()
  { extern void input(…),process(…),output(…);
  input(…); process(…); output(…);
static修饰的变量  }
  (2)⽂件subf1.c
  ……
  extern void input(……) /*定义外部函数*/
  {……}
  (3)⽂件subf2.c
  ……
  extern void process(……) /*定义外部函数*/
  {……}
  (4)⽂件subf3.c
  ……
  extern void output(……) /*定义外部函数*/
  {……}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。