首页 > 代码库 > 局部变量 全局变量和存储属性

局部变量 全局变量和存储属性

一.概述

1.局部变量

  在函数内部定义,或者在结构体内定义。它的作用域仅仅限于本函数或本结构,生存期为开始创建(程序执行到定义的语句)到本函数结束。换句话说,在另一个函数中不能用本函数的变量,即使名相同也是如此。

2.全局变量

  在函数外部定义。全局变量在编译时已经生成,到整个程序结束时才释放。在一个函数内对全局变量进行操作后的值是可以保留下来的,即可以在另一个函数中使用这个新的值。这可以用来实现多个参数的回传(return 只能返回一个值)。但应注意,全局变量不能过多使用,否则会降低程序的清晰性。

3变量的存储方式(auto、static、register、extern)

  存储空间分为:程序区、静态存储区和动态存储区。

  二.局部变量总结

  局部变量的静态和动态(加static与否)是规定其存储区域的,决定了其生存期。

  1).动态局部变量

    局部变量的存储方式是动态(auto)的,即根据需要动态的分配存储空间,也动态的释放。如果不加声明,默认为auto 型。

  2).静态局部变量

    我们已经说过,局部变量是动态的存储方式,这就意味着当它执行完就会被释放,但有时候想要保留这个值,这就有了静态局部变量。

    如:static int a;这就定义了一个静态局部变量。他属于静态存储类别,故整个程序运行期间都不会释放,它是在编译时就生成并且赋初值的,在以后调用时不会再赋值,而是使用这个新的值。

  3)register变量

    寄存器是集成在cpu中的,因而register变量比存在内存中的变量读取速度更快。但容量太小,不建议使用。

  三.全局变量总结

  全局变量是一定存在静态区域的,加static与否决定的是其作用域,加static限制了该变量只能作用于本文件。

  1)extern使用

    有时我们定义了全局变量,但在定义处的上方我们仍然想要使用这个变量,怎么办呢?用extern int a;在需要处加以声明。

    extern 还可以用于多文件中同一全局变量的使用。在另一文件中,用extern可以把本文件的变量作用域延展到另一文件。

  2)static使用

    想要该全局变量仅仅限于本文件使用,用static。

 

   综上所述,1。static等标记称之为存储属性,默认为auto。int等称之为操作属性。

        2。生存期和作用域可以用下表表示:                   

            3。c语言中static的语义

        1).局部
          a.静态局部变量在函数内定义,生存期为整个源程序,但作用域与自动变量相同,只能在定义该变量的函数内使用。退出该函数后, 尽管该变量还继续存          在,        但不能使用它。
          b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。
        2).全局
          全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。但是他们的作用域,非静态全局 变量的作用域是整个源程序(多个源文件可以共同使用); 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。

局部变量 全局变量和存储属性