`
javaG
  • 浏览: 554715 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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(…);
}

(2)文件subf1.c
……
extern  void input(……)                           /*定义外部函数*/
{……}
(3)文件subf2.c
……
extern  void process(……)                     /*定义外部 函数*/
{……}
(4)文件subf3.c
……
extern void output(……)                        /*定义外部函数*/
{……}

注:加extern与不加extern的区别,参考http://javag.iteye.com/admin/blogs/255962

分享到:
评论

相关推荐

    C语言中static变量使用方法

    ### C语言中static变量使用方法详解 在C语言编程中,`static`关键字扮演着一个非常重要的角色,尤其是在处理变量的存储方式、作用域以及生命周期方面。本文将深入探讨C语言中`static`变量的使用方法,包括静态局部...

    c语言中 static 变量声明作用

    C语言中static变量声明的作用 在C语言中,static关键字有三个主要作用:隐藏、保持变量内容的持久和默认初始化为0。下面我们将详细解释每个作用。 1. 隐藏作用 static关键字的首要功能是隐藏。它可以使变量或函数...

    C语言中static用法大全

    - `static`关键字在C语言中有多种用途,包括但不限于定义全局静态变量、局部静态变量以及静态函数。 - 它们各自的作用域、存储位置以及初始化规则有所不同。 - 使用`static`关键字可以帮助开发者更好地管理变量的...

    c语言中static_用法总结

    在C语言中,`static`关键字是一个非常重要的概念,它可以帮助开发者更好地管理内存和控制变量的作用域。本文将详细介绍`static`关键字的不同用途及其对程序行为的影响,帮助读者深入理解C语言中的`static`。 #### ...

    C语言初级-static声明局部变量

    C语言使用static中声明局部变量的用法及作用源码 C语言使用static中声明局部变量的用法及作用源码 C语言使用static中声明局部变量的用法及作用源码 C语言使用static中声明局部变量的用法及作用源码 C语言使用...

    C语言中局部变量和全局变量_等在内存中的存放位置.doc

    "C语言中局部变量和全局变量在内存中的存放位置" C语言中局部变量和全局变量是两种不同的变量类型,它们在内存中的存放位置和作用域范围也不同。了解这两种变量的特点和使用方法是C语言编程的基础。 局部变量是指...

    c语言中static使用方法

    - **关键字static的历史**:在C语言中,`static`关键字最初被引入是为了表示在退出一个块后仍然存在的局部变量。随后,`static`又获得了另一种含义:用来表示不能被其他文件访问的全局变量和函数。尽管如此,为了不...

    C语言中static的作用.pdf

    Static是一个在C语言程序设计中非常重要的关键字,它具有多种含义,分别涉及变量的存储期、链接属性和函数内部变量的使用。 在C语言中,static关键字主要有以下几种用途: 1. 静态变量的存储期:当static关键字...

    c语言中static用法总结.pdf

    ### C语言中`static`关键字的深入解析 ...总之,`static`关键字在C语言中有着非常广泛的应用,无论是用于定义静态变量还是静态函数,都能有效地帮助开发者更好地管理程序的存储空间和控制变量及函数的作用范围。

    C语言中static详述

    在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。 一、Static的功能 1、隐藏 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明...

    c语言中static用法总结[借鉴].pdf

    "C语言中static用法总结" 一、C语言程序存储空间布局 C语言程序由五个部分组成:正文段、初始化数据段、非初始化数据段、栈和堆。其中,正文段包含 CPU 执行的机器指令,初始化数据段包含已初始化的全局变量,非...

    C语言static的用法

    ### C语言中的`static`关键字用法详解 在C语言编程中,`static`关键字具有非常重要的作用。本文将从不同角度对`static`在C语言中的应用进行深入解析,并结合具体的示例来帮助理解其背后的逻辑。 #### 一、`static`...

    c语言中static的用法详细示例分析

    static在c里面可以用来修饰变量,也可以用来修饰函数。先看用来修饰变量的时候。...彼此可以互相引用变量,但加入static修饰之后,只能被本文件中函数引用此变量。static对栈变量的修饰,可以认为栈变量的生命周期延长

    C语言的变量PPT课件.pptx

    C语言中的变量是编程的基础,理解变量的生存期和作用域对于编写高效、无误的代码至关重要。在C语言中,变量分为全局变量和局部变量,这两种变量在内存中的存储方式和可访问范围都有所不同。 3.1 变量的生存期: ...

    static和const用法详解

    static变量或函数只能在定义它们的文件中可见,对于其他文件是不可见的。static变量或函数的作用域是静态的,意味着它们的值在程序执行期间不会被改变。 static的三个作用 1. 隐藏:static的第一个作用是隐藏。在...

    c_全局变量

    "C语言中的变量存储类别和作用域" C语言中变量的存储类别和作用域是非常重要的概念。变量的存储类别决定了变量的生命周期和作用域,而变量的作用域则确定了变量的可见性和生命周期。在C语言中,变量可以分为局部...

    C语言静态变量和静态函数

    C_语言静态变量和静态函数,可以让您对C语言静态变量和静态函数有更清晰的认识

Global site tag (gtag.js) - Google Analytics