作用域
作用域是指标识符可见性(可用性),即在程序代码中哪些位置可以访问该变量。
C语言共有四种作用域:
1.函数作用域
2.文件作用域
3.块作用域
4.函数原型作用域
函数作用域
标号:和goto关键字配合使用,标号是唯一具有函数作用域的标识符。
注:函数中任意标号在函数范围内均可访问。
例如:计算两个整数的和。
输出:200
分析:sum函数直接跳到return语句完成两个参数的和计算,mylabel是标记,具有函数作用域,因此函数任意位置都可以访问,不需要先声明。
文件作用域
当声明的变量或其它标识符出现在块或函数声明形参表之外,该标识符声明之后具备文件作用域,在当前文件均可以访问。
例如:计算两个整数的和。
输出:200
分析:变量a和b是全局变量,声明以后,在整个文件均可以访问。
块作用域
声明在{}块内或函数定义的形参表中的标识符具有块作用域,在当前块{}内可以访问。
例如:
分析:
1.变量a和b是函数定义的形参变量,是块作用域
2.变量sum声明在函数{}块内,是块作用域
3.变量c同样是块作用域,sum函数无法访问c
函数原型作用域
当标识符出现在函数声明的参数中,而不是函数定义的形参中时,该参数标识符具备函数原型作用域,范围是在该函数声明结束为止。
例如:
分析:注意区分sum函数的定义,定义是带{}的,此时变量a和b具有块作用域,因此在{}内可以访问。
变量作用域规则
•具有文件作用域的变量,是全局变量
•具有块作用域的变量是局部变量
•变量作用域的起点是从变量的声明以后开始,终点根据作用域类型选择
•作用域覆盖原则是就近,不同作用域的变量标识符相同时,外层的变量标识符被屏蔽,就近访问当前作用域的标识符,当前作用域结束后,外层的变量标识符恢复可用
•全局变量定义时系统会默认初始化,局部变量系统不会初始化,建议变量均声明定义初始化后使用,全局变量使用内存的静态存储空间保存,局部变量会动态分配在栈中
例如:
运行结果
-----------------END-----------------