变量的作用域和生存期

来源:互联网 发布:js获取li标签的属性值 编辑:程序博客网 时间:2024/05/17 09:28

1.局部变量&全局变量的定义和声明

对于局部变量的定义和声明可以不加区分。对于全局变量,其定义必须在所有函数之外,且只能定义一次,其一般形式为:

[extern ] 类型说明符  变量名..

其中extern可省略,而全局变量的声明出现在要使用该变量的各个函数中,一般声明形式为:

extern  类型说明符 变量名

局部变量的作用域和生存期在定义该变量的模块内,全局变量的作用域和生存期是整个工程。

全局变量在定义时即分配内存单元(其内存分配是在编译过程中完成的),并可以做初始赋值,全局变量在声明时不可以再赋值,只是表明在函数内要使用某外部变量。

若局部变量与全局变量同名,则在局部变量的作用域中全局变量被屏蔽。


2.变量的存储方式

变量的存储方式分为静态存储和动态存储,静态存储是在程序编译时就分配存储空间直至整个程序执行结束。动态存储是在程序运行过程中使用到该变量时才分配存储空间,使用完毕立即释放。(典型的例子就是函数的形参)


3.C语言中变量的存储类型

auto static register  extern

3.1 auto

动态存储的局部变量

3.2 static

静态存储。分为静态局部变量和静态全局变量。

静态局部变量在函数内定义,生存期为整个程序的执行期间,但是其作用域与自动变量相同,也就是说,只能在定义该变量的函数内使用该变量,退出函数后,变量仍然存在但不能直接访问它。但如果再次调用定义它的函数时其值又可以使用,且保留了上次被调用后的值,(静态局部变量与自动变量的区别)可以对构造类静态局部变量赋初值,如果未赋值,则系统自动初始化为0,而不对自动变量赋值其值是不确定的。

静态全局变量即在全局变量前加static,(静态全局变量和非静态全局变量的区别)非静态全局变量的作用域是整个源程序,但当一个工程由多个文件组成时,非静态全局变量在各个源文件中都是有效的,而静态全局变量则限制了其作用域,即只有在定义该变量的源文件中有效,其他源文件不能访问它。


综上,把局部变量改变为静态变量后改变了它的存储方式,即改变了它的生存期。把全局变量改变为静态变量后即改版了它的作用域,限制了它的使用范围。因此,static在不同的地方所起的作用是不同的。

















0 0
原创粉丝点击