static用法总结

转载 2011年01月13日 19:25:00

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(…);
}
(2)文件subf1.c
……
extern  void input(……)                           /*定义外部函数*/
{……}
(3)文件subf2.c
……
extern  void process(……)                     /*定义外部 函数*/
{……}
(4)文件subf3.c
……
extern void output(……)                        /*定义外部函数*/
{……}

5.面试题: 关键字static的作用是什么?

      在C语言中,关键字static有三个明显的作用:
   1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变.
   2)在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问.它是一个本地的全局变量.
   3)在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用.那就是,这个函数被限制在声明它的模块的本地范围内使用.

Static关键字所有用法详解

以前总是对static的涵义模棱两可,不太敢用,也不知道什么地方改用,static用法非常广泛,静态变量、静态成员、静态函数等,如果用的好,会是程序提升一个等级,并且可以解决很多实际问题,比如单例模式...
  • yanglusheng
  • yanglusheng
  • 2016年07月13日 10:22
  • 1257

c/c++ static 用法总结(三版本合一)

最近经历了一些笔试和面试,经常会被问到static关键字的作用,感觉虽然知道一些,但 每次回答的都不够满意,今天在网上查了一下,总结总结,恩,以备后用! 综述 sta...
  • mznewfacer
  • mznewfacer
  • 2011年10月23日 13:32
  • 3640

Java中static作用及用法详解

static是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空...
  • fengyuzhengfan
  • fengyuzhengfan
  • 2014年07月24日 13:13
  • 10013

static的几种用法

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

Static用法总结

 http://blog.csdn.net/hackbuteer1/article/details/7487694 Static可以应用于普通的变量和函数,也可以应用于类中。 变...
  • muzhiai
  • muzhiai
  • 2014年04月23日 14:37
  • 433

Java Static 用法总结

前言: 以下大部分内容我从谷歌上搜索,结合官方的文档总结的。我认为会使用谷歌、会阅读官方的文档非常作用,这里都是最权威的参考。 Java中的Static关键字用的很多,但是总结起来,大概有:Sta...
  • cao478208248
  • cao478208248
  • 2014年07月07日 09:46
  • 424

static 用法总结

1.static 作用范围 :只能在一个文件里面。 假设 在一个cpp文件 test1.cpp里面声明 了静态全局变量 static int i =100; 在另外一个 一个cpp文件里面使用 i ...
  • QQ1451396178
  • QQ1451396178
  • 2013年10月27日 20:33
  • 418

static 用法总结

 今日从网上看到一篇好文章,汇总汇总,又拼凑拼凑,便有了下文。  static关键字是C、C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用(C,C...
  • sandyqy
  • sandyqy
  • 2008年11月18日 19:16
  • 441

Static基本用法总结

#include using namespace std; class test { private: int x,y; public: static int num...
  • qq_40565033
  • qq_40565033
  • 2017年11月23日 19:22
  • 29

Final、Static用法总结

首先介绍一下静态变量和类变量 静态变量也称为类变量,属于类,不属于类的任何一个对象,在内存中有且仅有一个拷贝,多个对象共享内存空间。 实例变量,依存于某个实例,须先创建对象才能通过对象访问。静态方...
  • qq_33098039
  • qq_33098039
  • 2017年09月24日 10:55
  • 84
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:static用法总结
举报原因:
原因补充:

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