一.概述
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).全局
全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。但是他们的作用域,非静态全局 变量的作用域是整个源程序(多个源文件可以共同使用); 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。