4.4.2 局部变量与全局变量
在 C 语言中,按照定义的位置不同,变量还可以分为局部变量与全局变量。在函数内定义的变量是局部变量,包括形参变量;在函数外定义的变量是全局变量。例如:
变量 a 定义在函数之外,它是全局变量,而变量 b、c、d 都是在函数之内,所以它们是局部变量。
在使用局部变量与全局变量时,需注意以下几点。
1.作用域
只有在变量的生命期内,才可以使用这个变量。其实这句话说得不太完整,因为确定一个变量是否可以使用,需要两个必要条件:①在生命期内;②在作用域内。也就是说,只有在变量的生命期内,并且处于变量的作用域内,用户才能使用这个变量。生命期控制着变量的生命权限,而作用域控制着变量的访问权限。就好像你要向小明借一本书,第一必须保证这本书是存在的,第二必须得见着小明,这两个条件缺一不可。
局部变量的作用域从定义处开始,直到函数的结尾处。变量 b、c、d 是局部变量,它们的作用域是从各自的定义处开始,至函数结尾,在其他地方是访问不到它们的。即使变量 d 是静态变量,虽然它的生命期在函数结束后仍然存在,但在作用域外仍然无法使用。
全局变量的作用域是所有程序文件。变量 a 是全局变量,它的作用域是所有的程序文件,即在程序的任何地方都可以使用。如果程序有多个文件,全局变量在所有的文件里都是可以访问和使用的。
2.全局变量的声明
函数的作用域也是所有的程序文件,所以全局变量和函数拥有同样的作用域。而且在使用时,全局变量与函数也非常相似,即全局变量在使用前也需要进行声明。
C 语言中,使用关键字“extern”来进行全局变量的声明,它的使用格式为:
extern 数据类型 全局变量名;
例如在使用全局变量 a 之前,我们可以对它进行声明:
extern int a;
“extern”翻译成中文是外部的意思,所以还经常将全局变量称为外部变量。因为所声明的全局变量有可能定义在程序的其他的文件之中。
与函数的定义包含对函数的声明一样,全局变量的定义也包含了对全局变量的声明。如果全局变量的定义与全局变量的使用位于同一个文件中,并且定义在使用之前,则不必再通过“extern”进行声明。反之,当全局变量的定义与全局变量的使用不在同一个文件时,或者全局变量的定义位于全局变量的使用之后,则需要在使用前通过“extern”对全局变量进行声明。
注意,在对全局变量进行声明时,不要对它进行初始化。例如:
extern int a = 100;
若这样使用,在 gcc 编译器下会给出一个错误:声明的时候不允许被初始化。
3.全局变量的存储类型
全局变量存储在静态区,和静态变量一样,也是属于静态存储类型,因此它拥有和静态变量一样的生命期,即程序生命期。
和静态变量另外一个相同之处是,全局变量在定义时,如果没有对其初始化,编译器会自动将其值初始化为 0。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论