http://www.cnblogs.com/hucn/archive/2011/03/25/1995386.html

一、 static 变量

static变量大致分为三种用法
1. 用于局部变量中,成为静态局部变量. 静态局部变量有两个用法,记忆功能和全局生存期. 
2. 用于全局变量,主要作用是限制此全局变量被其他的文件调用. 
3. 用于类中的成员.表示这个成员是属于这个类但是不属于类中任意特定对象

1. 静态局部变量
静态局部变量属于静态存储方式,它具有以下特点:
(1)静态局部变量在函数内定义    它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。

(2)允许对构造类静态局部量赋初值    例如数组,若未赋以初值,则由系统自动赋以0值。
(3)对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。 根据静态局部变量的特点, 可以看出它是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。

举例如下:
int fun() { 
    static int a = 1; 
    a++; 

在第一次进入这个函数的时候,变量a被初始化为1!并接着自增1,以后每次进入该函数,a就不会被再次初始化了,仅进行自增1的操作;在static发明前,要达到同样的功能,则只能使用全局变量: 
int a = 1; 
int fun() { 
    a++; 
}

2.静态全局变量
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。

3.static的类成员变量

static关键字有两种意思,你看上下文来判断

a,表示变量是静态存储变量,表示变量存放在静态存储区.

b,表示该变量是内部连接(这种情况是指该变量不在任何{}之内,就象全局变量那样,这时候加上static),也就是说在其它的.cpp文件中,该变量是不可见的(你不能用).

二、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(……)                          /*定义外部函数*/
{……}

c++ static 关键字用法相关推荐

  1. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  2. static关键字用法

    static关键字 1.修饰成员变量 在我们平时的使用当中,static最常用的功能就是修饰类的属性和方法,让他们成为类的成员属性和方法,我们通常将用static修饰的成员称为类成员或者静态成员,这句 ...

  3. Java的static关键字用法及原理

    文章目录 1.静态变量: 2.静态方法: 3.静态代码块: 4.静态内部类 5.主要用法: 6.本质问题: 1.静态变量: 定义了一个static关键字,用于修饰类的成员,如成员变量,成员方法,以及代 ...

  4. C++ static关键字用法

    前言:C++是C语言的扩展,C++兼容C语言的所有语法,所以static关键字在C语言中的用法对于C++同样适用:二者不同的是C++扩展出来的特性,而这些特性与C++面向对象有关. C语言中stati ...

  5. C++中static关键字用法

    原文参考:https://zhuanlan.zhihu.com/p/347930016 1.面向过程设计中的static 1.1静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一 ...

  6. asp.net(c#) static关键字用法小结

    转自http://www.cnblogs.com/dragonlhf/archive/2007/10/19/930664.html 静态变量 当我们编写一个类时,其实就是在描述其对象的属性和行为,而并 ...

  7. static 关键字用法总结

    一.static 关键字的含义 static是Java50个关键字之一.static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局静态成员变量,修饰方法表示静态方法.(注意:不能修饰普通 ...

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

    概述 static关键字在c语言中比较常用,使用恰当能够大大提高程序的模块化特性,有利于扩展和维护. 但是对于c语言初学者,static由于使用灵活,并不容易掌握.本文就static在c语言中的应用进 ...

  9. C/C++中static关键字用法汇总

    1. 函数内static局部变量:变量在程序初始化时被分配,直到程序退出前才被释放,也就是static是按照程序的生命周期来分配释放变量的,而不是变量自己的生命周期.多次调用,仅需一次初始化. 2. ...

最新文章

  1. 进击的Waymo,掘进无人驾驶深水区
  2. c语言五个整数排序,刚学c语言,老师让用if编一个五个数字从大到小的排序,有那个大神能帮我,谢谢啦...
  3. 《面向对象分析与设计》读书笔记——第一章 复杂性
  4. Engagement Center Communication timer实现逻辑
  5. [转]JQuery.Ajax之错误调试帮助信息
  6. webgl获取鼠标形状_三模无线搭配对称手型设计,游戏致胜利器,ROG烈刃2无线鼠标...
  7. 算法积累之处理数组数据
  8. c52单片机c语言编程,c52单片机c语言编程怎样实现阴历查询
  9. 关于 rm -rf * 你需要知道的
  10. 获取Http请求参数
  11. 历史上华人计算机科学家,郑州大学韩家炜、张宏江两位校友在世界顶尖计算机科学家排名中再度名列华人科学家和中国大陆科学家之首...
  12. JavaEE学习05--cookiesession
  13. Image2LaTeX + AxMath:公式自动识别 + word 编辑公式
  14. wireshark抓包分析IP数据报
  15. 安卓手机里的短信删除了如何恢复
  16. The slave I/O thread stops because master and slave have equal MySQL server UUID
  17. length () 和 length 的区别
  18. 5分绩点转4分_5分GPA3.7转化成4分制大概是多少了
  19. Zxing 预览框不变增加扫描区域,仿微信扫到一半就可以成功
  20. 计算机考研复试专业课【数据库】

热门文章

  1. xp安装mysql5.5.28_Windows XP系统安装MySQL5.5.28图解
  2. 二、数据分析前,打下数据处理基础(上)
  3. matlab摄像头录像保存在哪里,matlab连接摄像头读取视频部分解释
  4. 新年巨献!祝所有朋友新一年闪闪发光
  5. 博士申请 | 加拿大Mila实验室唐建教授招收深度学习方向博士生和实习生
  6. ICLR 2020 开源论文 | 多关系图神经网络CompGCN
  7. 岗位内推 | 微软亚洲互联网工程院自然语言处理组招聘
  8. linux操作这样用视频,Linux下使用mencoder对视频进行操作
  9. c++读取txt文件中的数字_在Python中读取包中的数据文件的三种方式
  10. python爬取小说代码bs4和_使用python爬虫,requests(夹带BeautifulSoup的使用)爬取网络小说...